UITableViewAutomaticDimension U

2020-08-11  本文已影响0人  MQ_Twist

一板一眼,就会滋生弱点。

前言

众所周知,在tableView里面的数据不多时,用UITableViewAutomaticDimension + autolayout进行自适应cell高度是一件哇塞的事儿,笔者这种情况都是这么做的,常在河边走,哪有不湿脚,这不问题来了。

问题

单行显示正常,2行cell高度有变化,但是还是显示单行,3行cell高度又高点,但只能显示2行,剩下的...,
目前出现的问题有,iPhone xs max,5s,其他机型暂时没有问题。

代码

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
    //预设高度,宏自己的
    return WIDTH_FOR_IPAD(100);
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewAutomaticDimension;
}

看着挺安逸。

CGFloat margin = WIDTH_FOR_IPAD(5);
[self.descLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(margin);
        make.left.equalTo(self.dotView.mas_right).offset(WIDTH_FOR_IPAD(7));
        make.right.equalTo(-margin);
        make.bottom.equalTo(-margin));
}];

上左下右也都有,labelnumberOfLines设置是0,看着还行没毛病哈,但就是有问题。开始我想的是机型或者是系统问题,后来。。。

CGFloat margin = WIDTH_FOR_IPAD(5);
[self.descLabel mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(margin);
    make.left.equalTo(self.dotView.mas_right).offset(WIDTH_FOR_IPAD(7));
    make.right.equalTo(-margin);
    //重点在这
    make.bottom.equalTo(-ceilf(margin));
}];

原因是,底部约束在经过宏计算之后出现了小数。初步猜测,在有小数的时候会出现精度丢失,最终自适应高度出现问题。

总结

有关小数导致出现适配有问题的情况之前我也遇到过,不过大多是有关collectionView的,item有的机型显示就是奇奇怪怪,后来对间距向下取整就解决问题了,没想到tableViewCell上也会有这种问题。

在寻找上面的原因的时候,也找到几个label不会换行的解决办法,比如:

- (void)layoutSubviews {
    [super layoutSubviews];
    self.descLabel.preferredMaxLayoutWidth = self.descLabel.bounds.size.width;
}

后记

平时技术不咋滴,写bug倒是一流,不过找到问题的所在并解决还是很开心的,通往大神这条路还有很长啊~

上一篇 下一篇

猜你喜欢

热点阅读