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,是真的存在的。
相關文章
相關標籤/搜索