在升级iOS14 使用xcode12 开发工具打包,发现SWTableViewCell.m出现闪退现象
运行代码发现self.subviews 为空数组。导致闪退。
解决方法:
在Add the cell scroll view to the cell之前,添加 [self contentView];即可。
延伸:
在 iOS14 之前,不管是 UITableViewCell
还是 UICollectionViewCell
,不管使用 self
还是 self.contentView
亦或是 xib 添加控件,最后的视图层级由下到上都是 cell - contentView - custom subviews
,其中 custom subviews
代表自己添加的控件。
在 iOS14 上,UITableViewCell
和 UICollectionViewCell
的视图层级已经不一样了。
先看下 UITableViewCell
-
代码创建
cell
- 不添加任何控件,系统会自动创建出
contentView
,视图层级由下到上为cell - contentView
- 如果使用
[self addSubview:];
添加控件,视图层级由下到上会变成cell - custom subviews - contentView
,这时候添加的控件在contentView
下面,如果子控件有点击事件,会被contentView
阻断掉 - 如果使用
[self.contentView addSubview:];
添加控件,视频层级由下到上会变成cell - contentView - custom subviews
,这时候跟 iOS14 之前是一致的。 -
- 由于在 xib 中,添加的控件全部是在
contentView
上的,所以跟 iOS14 是一致的,视图层级由下到上为cell - contentView - custom subviews
- 由于在 xib 中,添加的控件全部是在
- 不添加任何控件,系统会自动创建出