swift4.0 模拟微博cell, AutoLayout自动计算rowHeight, 约束冲突问题解决!

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/iOSTianNan/article/details/82151899

背景介绍:

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, 果然问题解决. 但是最好还是注释掉!交由子类自己实现!
这样,在子类中自动计算行高的时候, 就不会由于基类的行高影响子类.

这里写图片描述

猜你喜欢

转载自blog.csdn.net/iOSTianNan/article/details/82151899