2013-10-02 38 views
4

下面的屏幕截圖在iOS 7中。label1(黃色,頂部)用文本原點繪製,在文本框的左上角下方並剪切到底部。在iOS 5/6中,文本原點是標籤框架的左上角。 label2label3按預期呈現和佈局。UILabel文字佈局在iOS 7中「錯誤」時

enter image description here

這裏是產生這種看法代碼:

- (void)loadView 
{ 
    UIView *view = [[UIView alloc] initWithFrame:UIScreen.mainScreen.applicationFrame]; 
    view.backgroundColor = UIColor.blueColor; 
    self.view = view; 

    UILabel *label1 = [UILabel new]; 
    label1.backgroundColor = UIColor.yellowColor; 
    label1.font = [UIFont systemFontOfSize:16.0f]; 
    label1.numberOfLines = 0; 
    label1.lineBreakMode = NSLineBreakByWordWrapping; 
    label1.frame = CGRectMake(50, 100, 200, 18); 
    label1.text = @"This text is too long to fit on one line."; 
    [self.view addSubview:label1]; 

    UILabel *label2 = [UILabel new]; 
    label2.backgroundColor = UIColor.greenColor; 
    label2.font = [UIFont systemFontOfSize:16.0f]; 
    label2.numberOfLines = 0; 
    label2.lineBreakMode = NSLineBreakByWordWrapping; 
    label2.frame = CGRectMake(50, 150, 200, 36); 
    label2.text = @"This text is too long to fit on one line."; 
    [self.view addSubview:label2]; 

    UILabel *label3 = [UILabel new]; 
    label3.backgroundColor = UIColor.orangeColor; 
    label3.font = [UIFont systemFontOfSize:16.0f]; 
    label3.numberOfLines = 0; 
    label3.lineBreakMode = NSLineBreakByWordWrapping; 
    label3.frame = CGRectMake(50, 200, 200, 18); 
    label3.text = @"This text is short."; 
    [self.view addSubview:label3]; 
} 

問題:爲什麼在iOS的7本不同,什麼標籤屬性,我需要改變,以在文本按照預期從框架左上角開始渲染label1

回答

8

我想通了。與其刪除我的問題,我會在這裏回答,所以如果有其他人遇到這個問題,他們知道該怎麼做。

標籤幀被硬編碼爲特定尺寸。在label1的情況下,高度爲18.該邊界不夠高,不足以呈現具有16點系統字體的文本行。 iOS 5/6顯然是頂部對齊文本矩形,而在iOS 7中,這會導致不可預知的行爲。此修補程序是爲了確保標籤邊界足夠高以顯示至少一行文本。

問題中的示例代碼是爲了再現此問題。我的實際應用程序代碼根據所需的行數計算標籤高度,並在標籤周圍放置各種其他視圖,以便在運行時動態更改框架。我通過確保最小標籤高度適合單行文本來解決我的應用中的問題。