Closed JWXIAN closed 7 years ago
这是自适应失效了?
+1,希望能自适应处理好 10.3 系统下使用 Masonry 约束的高度计算
Same problem here...
I found the problem...
It looks like for some UILabel, a preferredMaxLayoutWidth is configured, mainly when they are created using the Storyboard/NIB file. And the problem is that the value available at the time that the Cell is created is the one it had on the Storyboard...
Setting all the label's preferredMaxLayoutWidth to 0 fixed the problem for me, i.e.:
self.labelnsideCell.preferredMaxLayoutWidth = 0;
Or even better:
self.labelnsideCell.preferredMaxLayoutWidth = self.frame.size.width;
暂时给contentView加上了上下左右的约束
10.3在调用systemLayoutSizeFittingSize的时候会多添加几条width和height的约束,导致约束冲突
我现在的解决办法是在awakeFromNib
中计算出label的实际宽度,并赋值给label.preferredMaxLayoutWidth
(我的cell是用xib写的)
归根结底还是得设置多行label
的preferredMaxLayoutWidth
属性,我的设置好之后就正常了
问题: 项目中使用 XIB 布局, 单个 cell 对应 单个view, 第一次打开带 多行 label 的 cell 时, 布局正常. 再打开其他的带多行 label的 cell 时, 自动布局失效,即行高计算错误. 解决方法: 目前 设置 label 的 preferredMaxLayoutWidth 在我的项目中不起作用 我的解决方法是 在 awakeFromNib 中填加如下代码:
[self layoutIfNeeded];
self.noteLabel.lineBreakMode = NSLineBreakByWordWrapping;(此行只在有多行 label 的 cell 视图中添加)
lineBreakMode 枚举中, 选择前三个任意一个, 布局正常. PS: 当打开一个行高计算错误的 cell 后, 之后打开的 cell 继续计算错误. 所以需要将所有用到缓存行高的 cell (包括没有多行 label 的 cell) 全部修改,即 不会再出现计算错误的情况下, cell 显示正常.
10.3 systemLayoutSizeFittingSize自动有width和height约束 导致约束冲突
使用preferredMaxLayoutWidth
设置时注意
纯代码项目中,使用Masonry和FD自适应cell高度,也出现一样的问题,这种情况应该怎么解决呢,每个cell都对应设置一下preferredMaxLayoutWidth
么
重新约束contentView self.contentView.mas_remakeConstraints { (m: MASConstraintMaker!) in m.edges.equalTo()(self) } 并且在cell的xib中更改cell的width为较大值。 测试有效。
楼主看到你的帖子,我赶紧看了一下我的界面,iOS10.3没有发现问题呀,好多人都说设置preferredMaxLayoutWidth, 我也没设置过呀,不知道你的问题出在哪里???我也是用的纯代码+ Masonry
@taogeyijiu 用nib布局会出问题
+1
设置多行label的preferredMaxLayoutWidth就好啦
结论: 多行label的preferredMaxLayoutWidth的问题
I resolve this use a estimatedRowHeight and set a value not zero. It is very helpful.
I resolve this use a estimatedRowHeight and set a value not zero. It is very helpful.
thank you