forkingdog / UITableView-FDTemplateLayoutCell

Template auto layout cell for automatically UITableViewCell height calculating
MIT License
9.94k stars 2.01k forks source link

高度计算不准确,每隔146个字符左右会增加留白 #316

Open ysjxys opened 7 years ago

ysjxys commented 7 years ago

环境: 1.6版本 ios10.3 6s模拟器 xcode 8.3.1 SnapKit 3.2.0

描述:cell的contentView内只有left、right、top、bottom均与superview对齐的一个label,label的text为145个字符及以下时,自适应高度显示正常,而当字符数量为146时,label的top与bottom均出现10db左右的留白,之后在290个字符时会再增加一层留白,再往后留白会随字符数继续增加,具体跳跃字符数没继续测了

重现频率:100%

Daren-Wang commented 7 years ago

+1 特别是大量文字的展开收起有很大的问题

stonelay commented 7 years ago

是的,文字计算高度时会有留白。

出现这样的原因,在前面的issues也描述了

iOS 10.3 以后,如果调用系统的 systemLayoutSizeFittingSize 方法,系统会自动给 contentView 加 width height 两个约束,这两个约束的值跟 xib 的 view size 一样。

这就导致了自定义 cell 中一个可变高度 label 的宽度约束依赖 contentView 的宽度时,而 contentView 有个错误的宽度约束,导致计算错误。
FDTemplateLayoutCell 1.6 版本增加了 padding 约束,但是相比系统增加的宽度约束优先级 -1,不能解决这个问题。

我暂时解决的办法

因为是contentView 的witdh 和 height 约束的问题。 在添加约束的时候,不去依赖content的width自己计算约束的width。

[questionLabel mas_updateConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self.contentView.mas_left).offset(30 * SCALE);
//            make.right.equalTo(self.contentView.mas_right).offset(-30 * SCALE);
            make.width.mas_equalTo(SCREENWIDTH - 60 * SCALE);// 不依赖contentWidth, 自己计算
            make.top.equalTo(self.contentView.mas_top).offset(20 * SCALE);
        }];

虽然是一个治标不治本的方法,但是目前能较好解决我遇到的问题。

期待能尽快解决bug。

wangyuuuu commented 7 years ago

我也遇到这个问题 我用的版本是1.4 也有折叠展开 上面这哥们说的很对 我也用这个方法 暂时解决了

dennishappy commented 7 years ago

+1

licansir commented 7 years ago

1.6版本ios10.3 是的 Masonry 也会出现这个问题 最后宽度只能这样写 make.width.mas_equalTo(SCREEN_WIDTH-16*2); 才解决了

DNC-7 commented 6 years ago

今天也发现了同样的问题