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

問題一

如何返回單行文字的高度sql

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

問題二

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


 

回答

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

nevan king,1969 贊blog

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

最簡單的作法是:get

[myLabel sizeToFit];

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
相關文章
相關標籤/搜索