系列文集:爆棧熱門 iOS 問題掂名。目錄在此然想。倉薯翻譯对湃,歡迎指正:)
問題
我有一個(gè)UILabel
高度最多能顯示兩行崖叫,如果里面內(nèi)容只有一行,它是垂直居中的拍柒。怎么能讓它頂端對(duì)齊呢心傀?
回答
答案1:用sizeToFit
改變UILabel
的高度
nevan king,1969 贊
沒法直接改變UILabel
的垂直對(duì)齊方式拆讯,但是把 label 的 frame 高度改小也能實(shí)現(xiàn)相同的效果剧包。為了看得清楚,我把 label 標(biāo)為橘黃色了往果。
最簡(jiǎn)單的做法是:
[myLabel sizeToFit];
如果內(nèi)容長(zhǎng)度超過一行疆液,把numberOfLines
設(shè)成 0(就是不限制行數(shù))。
myLabel.numberOfLines = 0;
[myLabel sizeToFit];
有一個(gè)問題是陕贮,如果你文字是水平居中的堕油,那么執(zhí)行完sizeToFit
后 frame 寬度也縮小了,文字會(huì)縮到左上角。解決方法是把 label 的寬度先存起來掉缺,執(zhí)行完sizeToFit
之后再設(shè)回來卜录。
另外要注意,sizeToFit
會(huì)把 label 的當(dāng)前寬度當(dāng)做最大寬度眶明,執(zhí)行之后寬度只會(huì)比變窄艰毒,不會(huì)變寬。
對(duì)于用 Auto Layout 的 NIB 和 Storyboard搜囱,Mark Amery 在評(píng)論中補(bǔ)充了解決方案:
如果 nib 或 storyboard 里用了 autoLayout丑瞧,那么在
viewDidLoad
調(diào)sizeToFit
是不管用的,因?yàn)閷?shí)際順序是先執(zhí)行viewDidLoad
再執(zhí)行 autoLayout蜀肘,執(zhí)行 autoLayout 的時(shí)候會(huì)把 sizeToFit 的結(jié)果覆蓋掉绊汹。
不過,在viewDidLayoutSubviews
里調(diào)sizeToFit
是管用的扮宠。
答案2:末尾補(bǔ)充換行
Purple Ninja Girl 西乖,44 贊
一個(gè)更簡(jiǎn)單的辦法(也是比較臟的辦法)是把UILabel
的 line break mode 設(shè)為 Clip
,然后直接在末尾加一些換行坛增。
myLabel.lineBreakMode = UILineBreakModeClip;myLabel.text = [displayString stringByAppendingString:"\n\n\n\n"];
這個(gè)方法不是萬能的——尤其是如果文字超出范圍获雕,需要在末尾顯示『…』就不行了。
答案3:用UITextField
代替UILabel
jowie 收捣,47 贊
用UITextField
取代UILabel
届案,默認(rèn)就是頂端對(duì)齊的』祷蓿可以把userInterationEnabled
設(shè)為NO
萝玷,讓它不能滾動(dòng)嫁乘。
答案4:重寫UILabel
的drawInRect
方法
Martin Wickman昆婿,21 贊
創(chuàng)建一個(gè)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
詳細(xì)說明見這里蜓斧。
系列文集:爆棧熱門 iOS 問題
譯者:@戴倉薯