AutoLayout下多行UILabel无法显示多行文本的问题

在项目中的一个自定义UITableViewCell中有个多行UILabel,用来显示多行文本的。项目中用了第三方库Masonry来给视图添加约束。添加完约束之后程序跑起来,发现这个UILabel总是不能显示多行文字,总是只显示一行文字就结束了,虽然设置的numberOfLines=0。我就纳闷了,我一直怀疑是我的约束加的有问题,就一遍又一遍的检查约束,调整约束。可是到头来还是显示不正常,我就奇怪了,之前我有一个显示多行的UILabel就显示正常了啊,同样是这样加的约束啊。查看之前的代码,发现那个多行的UILabel显示的是富文本,而富文本是自带有html标签的字符串,所以能正常显示多行。区别就在这里了,查看资料发现UILabel在iOS6中添加了一个这样的属性:preferredMaxLayoutWidth。看帮助文档是这样解释的:

This property affects the size of the label when layout constraints are applied to it. During layout, if the text extends beyond the width specified by this property, the additional text is flowed to one or more new lines, thereby increasing the height of the label.

再看Xcode里面的解释:

// Support for constraint-based layout (auto layout)

// If nonzero, this is used when determining -intrinsicContentSize for multiline labels

看到这个解释,我想到了UIScrollView的布局,要确定自己的Size,必须由它的子视图计算得出,而子视图的尺寸计算必须有一个确定的参考物,否则子视图的真实尺寸计算不出来,那就得不到UIScrollView的contentSize。这个属性决定了多行UILabel的真实尺寸,多行UILabel不知道自己要显示多少内容,不知道自己的真实尺寸,这个preferredMaxLayoutWidth属性就告诉了它布局时最大的参考宽度。


正确地设置了UILabel的preferredMaxLayoutWidth属性之后发现它正常地显示了多行文本内容。


总结:如果多行UILabel单纯的显示多行文本,不是带标签的富文本,那么就要设置preferredMaxLayoutWidth属性。如果是显示多行带html标签的富文本内容,可以不设置这个属性。那么为了不出错,最好两种情况下都设置下这个属性。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值