iOS UI 的坑:不要 remove UITableViewCell 的 contentView

问题背景

看到标题,你可能会想,怎会有人傻到这么作?好吧,一个像我同样没有经验的程序员的确可能。
这个问题的背景是,在须要重绘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 上。code

SomeTableViewCell.m

[self removeAllSubviews];
// ……
[self addSubview:view];

这样在removeAllSubviews时,不只 remove 掉了本身添加的那些子 view,也一同 remove 掉了UITableViewCellcontentViewrem

错误的后果

错误的作法形成的后果是:在 iOS 7(测试用版本为7.1)上,cell 显示为一片空白。全部的 subview 都显示不出来。在 iOS 6 和 iOS 8 上均正常。bug

总结

  1. 千万不要 remove UITableViewCellcontentView
  2. 必定要测试到每一个系统版本。在 iOS 6 和 iOS 8 都正常,仅在 iOS 7 上出现的 bug,是真的存在的。
相关文章
相关标签/搜索