iOS基礎 --- UILabel的使用及對齊方式


問題一

如何返回單行文字的高度

font.lineHeight,如label.font.lineHeight,可button.titleLabel.font.lineHeight

問題二

我有一個UILabel高度最多能顯示兩行,如果里面內容只有一行,它是垂直居中的。怎么能讓它頂端對齊呢?


 

回答

答案1:用sizeToFit改變UILabel的高度

nevan king,1969 贊

沒法直接改變UILabel的垂直對齊方式,但是把 label 的 frame 高度改小也能實現相同的效果。為了看得清楚,我把 label 標為橘黃色了。

最簡單的做法是:

[myLabel sizeToFit];

sizeToFit

如果內容長度超過一行,把numberOfLines設成 0(就是不限制行數)。

myLabel.numberOfLines = 0; [myLabel sizeToFit];

有一個問題是,如果你文字是水平居中的,那么執行完sizeToFit后 frame 寬度也縮小了,文字會縮到左上角。解決方法是把 label 的寬度先存起來,執行完sizeToFit之后再設回來。

另外要注意,sizeToFit 會把 label 的當前寬度當做最大寬度,執行之后寬度只會比變窄,不會變寬。

對於用 Auto Layout 的 NIB 和 Storyboard,Mark Amery 在評論中補充了解決方案:

如果 nib 或 storyboard 里用了 autoLayout,那么在viewDidLoad調sizeToFit是不管用的,因為實際順序是先執行viewDidLoad再執行 autoLayout,執行 autoLayout 的時候會把 sizeToFit 的結果覆蓋掉。
不過,在viewDidLayoutSubviews里調sizeToFit管用的。


答案2:末尾補充換行

Purple Ninja Girl ,44 贊

一個更簡單的辦法(也是比較臟的辦法)是把UILabel的 line break mode 設為 Clip,然后直接在末尾加一些換行。

myLabel.lineBreakMode = UILineBreakModeClip;myLabel.text = [displayString stringByAppendingString:"\n\n\n\n"];
這個方法不是萬能的——尤其是如果文字超出范圍,需要在末尾顯示『…』就不行了。

答案3:用UITextField代替UILabel

jowie ,47 贊

用UITextField取代UILabel,默認就是頂端對齊的。可以把userInterationEnabled設為NO,讓它不能滾動。

答案4:重寫UILabel的drawInRect方法

Martin Wickman,21 贊

創建一個UILabel的子類,用起來非常方便:

// TopLeftLabel.h
#import <Foundation/Foundation.h>
@interface TopLeftLabel : UILabel {
}
@end
// TopLeftLabel.m
#import "TopLeftLabel.h"
@implementation TopLeftLabel
- (id)initWithFrame:(CGRect)frame { 
    return [super initWithFrame:frame];
}
- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {
    CGRect textRect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines]; 
    textRect.origin.y = bounds.origin.y; 
    return textRect;
}
-(void)drawTextInRect:(CGRect)requestedRect { 
    CGRect actualRect = [self textRectForBounds:requestedRect limitedToNumberOfLines:self.numberOfLines]; 
    [super drawTextInRect:actualRect];
}
@end

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM