iOS 「黑科技」解決多行UILabel的頂對齊問題
2016年2月16日iOS Standard
當你定義一個固定高度的UILabel為多行時,很多人直接改變numberOfLines和lineBreakMode就了事。但是這樣的做法會有一個小問題,即文本的對齊問題。
舉個小例子:numberOfLines = 2,但是文本長度只夠一行,你會發現這行文本在垂直方向上是居中的,沒有貼住頂部,並且OC沒有提供直接的方法進行頂對齊
解決方案:
執行文本賦值操作后,執行以下語句動態計算文本高度以達到頂對齊的目的(我已封裝為類方法)
1 2 3 4 5 6 7 8 9 10 11 12 | + (void)alignLabelToTop:(UILabel *)label{ CGSize maxSize = CGSizeMake(label.frame.size.width, label.frame.size.height); label.adjustsFontSizeToFitWidth = NO; NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc]init]; paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; NSDictionary *attributes = @{NSFontAttributeName:label.font, NSParagraphStyleAttributeName:paragraphStyle.copy}; // get actual height CGRect rect_calc = [label.text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:attributes context:nil]; CGRect rect = label.frame; rect.size.height = rect_calc.size.height; label.frame = rect; } |
需要注意的是方法中的maxSize為label當前大小,即縮小一次后不再還原,導致cell複用的時候不能使其再次變長。解決方法是直接固定一個maxSize。
发表评论或回复