UITableViewCell中的 [cell addSubview:button]; 与 [cell.contentView addSubview:button];的区别

 同事反馈有用户 手机升级到 14.2某个button 点击没反应了。一查发现button在UITableViewCell上并且是  [cell addSubview:button];的方式添加的。当把  [cell addSubview:button] 换成   [cell.contentView addSubview:button];可以正常点击了。那么问题来了,是什么导致14无法点击呢?苹果又整了什么幺蛾子 <手动狗头>

 UIButton *btn = [[UIButton alloc]init];
    btn.frame = CGRectMake(20, 10, 100, 30);
    btn.tag = 100 + indexPath.row;
    if (indexPath.row % 2 == 0) {
        btn.backgroundColor = [UIColor redColor];
        [cell addSubview:btn];
    } else {
        btn.backgroundColor = [UIColor greenColor];
        [cell.contentView addSubview:btn];
    }
    [btn addTarget:self action:@selector(btnClick:) forControlEvents:(UIControlEventTouchUpInside)];

测试上面的代码:

添加到cell上的点击没反应,添加到cell的contenView上的可以!

看层级图:

添加cell上的很明显被  contenView 挡住了;添加contenView上的绿色没被遮挡;

之前怎么可以点击呢? 之前contenView在下面呢。苹果又搞什么鬼呢<吐血>

总结:以后尽量别把控件加在cell上,要加在cell的contenView 上。显示控件无所谓(尽量不要加),有点点击事件的老老实实加在contentView上吧!

奉上神图以供参考:(注意继承UIcontrol下的控件)

//tip

1 加在cell上的通过cell.subviews 有可能添加的btn,把btn加在cell.contentView上,查找时通过cell.contentView.subviews就可以完美的解决这个问题。

2  区别在于进行cell编辑时,比如cell内容向左移或者右移时, 添加cell方式子视图不会移动, 添加cell的contentView,所以这种情况一般使用第二种方式。

    还有在设置backgroundColor时,使用cell设置时左移或者右移颜色是不会变的,而用cell.contentCell设置时,移动后的空白会显示cell的默认颜色,这种情况视实际情况选择。

     以前添加cell和cell.contentView上区别不大 ,ios 14 以后就需要注意一下了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值