免责声明:我工作太晚了。但是,我决心今晚度过这一关。
我有一个支持不同颜色主题的应用程序。黑暗的细胞背景一直存在问题。
我一直在四处寻找一种可怕的方法,在黑色背景的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来做这项工作。