UITableViewCell内容查看自定义披露图像框架问题



免责声明:我工作太晚了。但是,我决心今晚度过这一关。

我有一个支持不同颜色主题的应用程序。黑暗的细胞背景一直存在问题。

我一直在四处寻找一种可怕的方法,在黑色背景的uitableviewcells中绘制附件披露图标。

我决定尝试覆盖setAccessoryType来继承我50多个视图的功能:

-(void) addWhiteDisclosureImage {
    UIImageView *disclosureView = (UIImageView*) [self.contentView viewWithTag:kDisclosureReplacementImageTag];
    if(!disclosureView) {
        [super setAccessoryType:UITableViewCellAccessoryNone];
        disclosureView = [[UIImageView alloc] initWithImage:self.whiteDisclosureImage];
        disclosureView.tag = kDisclosureReplacementImageTag;
        disclosureView.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin;
DebugLog(@"%f, %f", self.frame.size.width, self.frame.size.height);
        [self.contentView addSubview:disclosureView];
        [self.contentView bringSubviewToFront:disclosureView];
        [disclosureView release];
    }
}
- (void)setAccessoryType:(UITableViewCellAccessoryType)accessoryType {
    if(accessoryType == UITableViewCellAccessoryDisclosureIndicator) {
        if ([self.viewController isKindOfClass:[ViewControllerBase class]]) {
            ViewControllerBase *view = (ViewControllerBase*) self.viewController;
            if(view.colorTheme && view.colorTheme.controlBackgroundColor) {
                if([ViewColors colorAverage:view.colorTheme.controlBackgroundColor] < 0.2) { //substitute white disclosure indicator
                    [self addWhiteDisclosureImage];
                    return;
                } else { //not dark enough
                    [self removeWhiteDisclosureImage];
                    [super setAccessoryType:accessoryType];
                    return;
                }
            } else { //no colorTheme.backgroundColor
                [self removeWhiteDisclosureImage];
                [super setAccessoryType:accessoryType];
                return;
            }
        } else { //viewController is not type ViewControllerBase
            [self removeWhiteDisclosureImage];
            [super setAccessoryType:accessoryType];
            return;
        }
    }
    UIView *disclosureView = [self.contentView viewWithTag:kDisclosureReplacementImageTag];
    if(disclosureView)
        [disclosureView removeFromSuperview];
    [super setAccessoryType:accessoryType];
}

此覆盖通常在cellForRowAtIndexPath中调用。

这似乎是一个不错的选择,直到我深入研究并回来。对于某些单元格,单元格框将比第一次大得多。这种情况总是发生在我一直在测试的6个单元格中的同一个单元格上。这个细胞显然有一些独特之处:它是框架大小的。

以下是我为第一次表视图加载(在某些情况下,每次加载/重新加载)记录的单元格的大小:320000000,44000000

这是在调用reloadData后,我得到的某些(而不是全部)单元格的不同之处:759.000000,44.000000

有人知道为什么会发生这种事吗?

更新:可疑单元格的自定义附件公开视图几乎就像它的自动resizing标志设置为none一样。我通过将all设置为none来确认这一点。我这么说几乎是因为我看到它在重新加载数据后排成一行。一秒钟后,它移到了左边(当我选择不进行自动重影时,它们都会在那里结束)。

不要乱搞子视图和计算框架
只需将accessoryView替换为新的imageView即可。让iOS来做这项工作。

最新更新