iOS UI 的坑:不要 remove UITableViewCell 的 contentView

本文探讨了在UITableViewCell中正确管理子视图的方法,避免在清除旧视图时导致的显示问题,尤其是在iOS7上的空白cell问题。正确的做法是将所有子view添加到contentView上,而非cell本身。

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

错误的后果

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

转载于:https://www.cnblogs.com/ChouDanDan/p/5112645.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值