【发布时间】:2012-07-15 13:33:17
【问题描述】:
以编程方式创建多行 UILabel、将其添加到 UIView 并将 UIView 添加到视图控制器以便在方向更改时正确调整大小的最佳方法是什么?
我看到类似的问题以前被问过很多次,但我没有找到针对我的特殊情况的任何解决方案。我有一个视图,我正在尝试添加一个多行 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 上遗漏了一些东西,但我已经为此苦苦挣扎了几天,所以我觉得我已经尝试了所有方法。任何建议将不胜感激。
【问题讨论】:
-
天哪,你真的只是在一个框架中使用了
MAXFLOAT吗? -
不,绝对太小了。显然,iOS 设备的长度为 ((float)3.40282346638528860e+38) 像素。
标签: objective-c ios xcode uiview uilabel