2012-07-15 58 views
3

什麼是以編程方式創建多行UILabel,將其添加到UIView,並將該UIView添加到視圖控制器,以便它將正確調整方向更改時的最佳方式是什麼?以編程方式創建UILabel不調整旋轉

我看到類似的問題之前已經被問過許多次,但我沒有找到任何解決方案來解決我的特殊情況。我有一個視圖,我試圖添加多行UILabel。我想出的代碼添加了標籤,但它始終是橫向模式下視圖的寬度。旋轉iPad導致整個應用程序按預期旋轉,除了UILabel太寬。我敢肯定,答案在於.autoresizingMask.sizeToFit.autoresizesSubviews屬性的某種組合,但我到目前爲止還沒有得到它。這裏是我的代碼,這一點

UIViewController *vc = [[UIViewController alloc] init]; 
    vc.title = @"Welcome"; 

    // tbc is an instance of the tab bar controller that this view will go into 
    UILabel *copy = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, tbc.view.frame.size.width, MAXFLOAT)]; 
    NSString *copyText = @"Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Cras mattis consectetur purus sit amet fermentum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Cras mattis consectetur purus sit amet fermentum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi leo risus, porta ac consectetur ac, vestibulum at eros."; 
    UIFont *copyFont = [UIFont fontWithName:@"HoeflerText-Regular" size:20.0f]; 
    [copy setContentMode:UIViewContentModeScaleAspectFit]; 
    [copy setText:copyText]; 
    [copy setFont:copyFont]; 
    [copy setNumberOfLines:0]; 
    [copy setLineBreakMode:UILineBreakModeWordWrap]; 
    [copy setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleRightMargin]; 

    CGRect frame = copy.frame; 
    frame.origin.x = 50; 
    frame.origin.y = 100; 
    frame.size.width = tbc.view.frame.size.width; 
    frame.size.height = tbc.view.frame.size.height - 100; 
    [copy setFrame:frame]; 
    [copy sizeToFit]; 

    UIView *content = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tbc.view.frame.size.width, vc.view.frame.size.height)]; 
    [content setAutoresizesSubviews:YES]; 
    [content addSubview:copy]; 
    [content sizeToFit]; 

    [vc.view setAutoresizesSubviews:YES]; 
    [vc.view setContentMode:UIViewContentModeScaleAspectFit]; 
    [vc.view addSubview:content]; 

正如我所說的,我敢肯定,我的思念與.autoresizeMask的東西,但我一直在打我的頭在牆上的這幾天,所以我感覺就像我試過一切。任何建議,將不勝感激。

+0

好好的肉汁,你真的只是在一個框架中使用MAXFLOAT嗎? – CodaFi 2012-07-15 13:36:34

+1

什麼,太大? ;) – 2012-07-15 16:40:51

+0

不,絕對太小。顯然,iOS設備是((浮動)3.40282346638528860e + 38)像素長。 – CodaFi 2012-07-15 16:45:45

回答

3

只需添加:

[content setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleRightMargin]; 

當你說:

setContentMode:,你只是告訴視圖如何調整子視圖如果邊界的變化,但是,界限不改變! ! (因爲缺少自動調整屏蔽標誌)

如果vc是從NIB加載的viewController,請從NIB文件中仔細檢查其視圖的autorsizing選項,否則,也會爲其添加自動調整屏蔽標誌。

+1

還要將行數設置爲零。 – 2012-07-15 13:47:30

+1

這就是我想念的。我實際上必須刪除'UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin'標誌,但在父視圖上設置'autoresizingMask'是主要問題。謝謝! – 2012-07-15 16:39:13