UILabel一行居中对齐与多行左对齐

想来用过UIAlertView的都知道其中的文字内容是居中对齐(水平方向)的,如果只有一行文字还好,多行文字时如果最后一行撑不满宽度,也会显示居中效果,整体看起来怪怪的。

这其实就是其中的label控件设置了水平居中(水平方向)的效果,它没法自动根据文字行数来自动调整对齐方式。

如果把label设置成文字内容左对齐,多行内容左对齐满足了,但是只有一行内容且很短时也居左对齐显得不太好。

所以问题就来了:怎么实现UILabel控件文字只有一行时居中对齐,有多行时左对齐。

常规办法无非是判断文字内容是否多行,涉及到宽度计算问题,想来就觉得麻烦,能不能让它自动计算呢?

不要让UILabel限制了思维,试问一个问题:如果一个label是左对齐,文字内容很短,不足以撑满屏幕宽度,怎么让它一个屏幕中显示的效果是水平居中呢?
我想答案应该是让label自适应文字内容宽度,设置label水平居中对齐于屏幕。
这个时候我想label无论设置什么水平方向对齐方式,都对上面的事实毫无影响。
既然多行需要居左对齐,那么就把label设置为左对齐,就好了。

所以为了解决上面的问题,需要借助一个containerView和AutoLayout。

这用到了UILabel的一个属性:intrinsicContentSize。有了这个属性,在AutoLayout中对UILabel控件进行布局时,可以不指定其宽高而让它根据文字内容进行自动适配宽高。

设置label和containerView的AutoLayout的方法应该是这样的:label相对于containerView水平方向、 垂直方向居中,不指定label宽度,label.left>=containerView.left,label.right<=containerView.right,label.top>=containerView.top,label.bottom<=containerView.top。

参考:

深入理解Auto Layout 第一弹 | 张不坏的博客

你可能感兴趣的:(UILabel一行居中对齐与多行左对齐)