看到标题,你可能会想,怎会有人傻到这么作?好吧,一个像我同样没有经验的程序员的确可能。
这个问题的背景是,在须要重绘UITableViewCell
时,常常遇到须要清空全部subview的状况。而咱们有这样一段代码能够利用:程序员
- (void)removeAllSubviews { for (UIView *subView in self.subviews) { [subView removeFromSuperview]; } }
正确的作法是,把全部的子 view 都加在 contentView
上。测试
[self.contentView removeAllSubviews]; // …… [self.contentView addSubview:view];
错误的作法是,把子 view 加在 cell 自己的 view 上。code
[self removeAllSubviews]; // …… [self addSubview:view];
这样在removeAllSubviews
时,不只 remove 掉了本身添加的那些子 view,也一同 remove 掉了UITableViewCell
的contentView
。rem
错误的作法形成的后果是:在 iOS 7(测试用版本为7.1)上,cell 显示为一片空白。全部的 subview 都显示不出来。在 iOS 6 和 iOS 8 上均正常。bug
UITableViewCell
的contentView