你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> [爆棧搶手 iOS 問題] 讓 UILabel 頂端對齊

[爆棧搶手 iOS 問題] 讓 UILabel 頂端對齊

編輯:IOS開發綜合

系列文集:爆棧搶手 IOS 問題。目錄在此。倉薯翻譯,歡送指正:)

問題

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

[爆棧熱門 IOS 問題] 讓 UILabel 頂端對齊

答復 答案1:用sizeToFit改動UILabel的高度

nevan king,1969 贊

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

最復雜的做法是:

[myLabel sizeToFit];
[爆棧熱門 IOS 問題] 讓 UILabel 頂端對齊
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:重寫UILabeldraWinRect辦法

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

詳細闡明見這裡。

原文地址:Vertically align text within a UILabel

本文地址:http://www.jianshu.com/p/429470186933

系列文集:爆棧搶手 iOS 問題

譯者:@戴倉薯

【[爆棧搶手 iOS 問題] 讓 UILabel 頂端對齊】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved