背景介绍:
1.我有一个baseViewController. 里面内置一个父类级别的tableView. 并且实现好了代理方法,以供子类重写实现自己的功能
// MARK: - 基类tableView代理方法
extension LFBaseViewController: UITableViewDataSource,UITableViewDelegate {
//基类只是负责方法的提供 - 具体实现交由子类处理
func numberOfSections(in tableView: UITableView) -> Int {
//返回值不做要求 - 只是为了语法不出错误
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
//返回值不做要求 - 只是为了语法不出错误
return 0
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
//返回值不做要求 - 只是为了语法不出错误
return 44
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//返回值不做要求 - 只是为了语法不出错误
return UITableViewCell()
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
}
}
2. 我又有一个HomeViewController的子类
这里负责具体实现 微博数据cell的加载!
我们知道, 在iOS8以后, 可以使用AutoLayout的xib约束配合这两个属性,让cell的行高自动计算
// 设置行高
tableView?.rowHeight = UITableViewAutomaticDimension
// 设置预估的行高
tableView?.estimatedRowHeight = 60
当我完成了xib的约束设置
一开始,我一直以为的xib设置有问题,以至于出现错误后,一直报约束冲突. 其实xib部分的约束添加是ok的.
出现问题
如图
再看约束情况
约束冲突日志
一开始方向错误,一直在排查xib部分约束是否设置有误,直到使用一个非常简单的xib布局一个Label,问题依旧.才把目光放在报错日志上
仔细阅读冲突日志以及xib的对应约束, 发现 NSLayoutConstraint:0x60000029fdb0 UITableViewCellContentView:0x7fbe86559240.height == 44, 这个内容在我的xib中, 压根不存在, 再一看, 44不是我们常见的好伙伴么
这个44我好想在哪里写过. 同时,也在怀疑,是否由于cell的行高过小以及被写死,导致了约束的冲突, 看图明显觉得,头像icon的图片被严重压缩.
=====
问(zui)题(kui)解(huo)决(shou)
还记得最开始, 我的BaseViewController吗, 那里面就写死了返回行高44! 尝试着改为100, 果然问题解决. 但是最好还是注释掉!交由子类自己实现!
这样,在子类中自动计算行高的时候, 就不会由于基类的行高影响子类.