如何返回單行文字的高度sql
font.lineHeight,如label.font.lineHeight,可button.titleLabel.font.lineHeightspa
我有一個UILabel
高度最多能顯示兩行,若是裏面內容只有一行,它是垂直居中的。怎麼能讓它頂端對齊呢?code
sizeToFit
改變UILabel
的高度nevan king,1969 贊blog
無法直接改變UILabel
的垂直對齊方式,可是把 label 的 frame 高度改小也能實現相同的效果。爲了看得清楚,我把 label 標爲橘黃色了。ip
最簡單的作法是:get
[myLabel sizeToFit];
若是內容長度超過一行,把numberOfLines
設成 0(就是不限制行數)。string
myLabel.numberOfLines = 0; [myLabel sizeToFit];
有一個問題是,若是你文字是水平居中的,那麼執行完sizeToFit
後 frame 寬度也縮小了,文字會縮到左上角。解決方法是把 label 的寬度先存起來,執行完sizeToFit
以後再設回來。it
另外要注意,sizeToFit
會把 label 的當前寬度當作最大寬度,執行以後寬度只會比變窄,不會變寬。io
對於用 Auto Layout 的 NIB 和 Storyboard,Mark Amery 在評論中補充瞭解決方案:class
若是 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