看到标题,你可能会想,怎会有人傻到这么做?好吧,一个像我一样没有经验的程序员的确可能。 这个问题的背景是,在需要重绘UITableViewCell时,经常遇到需要清空所有subview的情况。而我们有这样一段代码可以利用:
UIView+Utils.m
- (void)removeAllSubviews {
for (UIView *subView in self.subviews) {
[subView removeFromSuperview];
}
}
正确的做法
正确的做法是,把所有的子 view 都加在 contentView上。
SomeTableViewCell.m
[self.contentView removeAllSubviews];
// ……
[self.contentView addSubview:view];
错误的做法
错误的做法是,把子 view 加在 cell 本身的 view 上。
SomeTableViewCell.m
[self removeAllSubviews];
// ……
[self addSubview:view];
这样在removeAllSubviews时,不仅 remove 掉了自己添加的那些子 view,也一同 remove 掉了UITableViewCell的contentView。
错误的后果
错误的做法造成的后果是:在 iOS 7(测试用版本为7.1)上,cell 显示为一片空白。所有的 subview 都显示不出来。在 iOS 6 和 iOS 8 上均正常。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步