想來用過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。