正确的方法使用sizeThatFits:和sizeToFit与UILabel?

时间:2010-10-26 10:05:21

标签: iphone resize uilabel sizetofit

目前我使用[aString sizeWithFont:constrainedToSize:lineBreakMode:]正确调整了标签尺寸,但我已将旋转引入我的设备并具有灵活的宽度和高度,这导致我的UILabel拉伸宽度方式(因为它相对于主视图设置)但不是按高度收缩以补偿额外的空间。

在另一个问题中,我问我被告知要使用sizeToFit和/或sizeThatFits:但是我在互联网上找不到任何有用的资源,告诉我如何正确使用这个和试验我'完成导致非理性行为。

简而言之,我可以说我有这样的结构:

UIView *innerView = [[UIView alloc] initWithFrame:CGRectMake(10, 10, self.view.frame.size.width-20, 0)];
[innerView setAutoresizingMask:*flexible width and height*]
[innerView setBackgroundColor:[UIColor redColor]];
[self.view addSubview:innerView];

UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, innerView.frame.size.width-20, 0)];
[myLabel setAutoresizingMask:*flexible width and height*]
[myLabel setBackgroundColor:[UIColor blueColor]];
[myLabel setNumberOfLines:0];
[myLabel setLineBreakMode:UILineBreakModeWordWrap];
[innerView addSubview:myLabel];

这是一个简化版本(也是通过免责声明,这不是我的实际代码,我意识到这些元素会泄漏,其他一切......这只是一个例子,所以你可以看到结构)。

基本上我有这两个元素。现在轮换时,它们都会伸展以适应新的视图大小。我需要的是一种增加或减少高度以动态适应内容的方法。 [aString sizeWithFont...]只是静态的。那么我如何使用sizeToFitsizeThatFits来实现这种动态?

谢谢。

汤姆

1 个答案:

答案 0 :(得分:2)

您是否尝试在屏幕旋转后重置标签的边框?在以下位置检查 interfaceOrientation 的值:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

然后,为 didRotateFromInterfaceOrientation 中的每个视图模式相应地设置标签的框架。

以下是调整字符串长度标签帧大小的示例:http://cocoamatic.blogspot.com/2010/08/uilabel-dynamic-sizing-based-on-string.html