如何在iPhone方向更改时调整标签大小并重新定位?

时间:2012-11-22 15:02:54

标签: iphone objective-c ios6

我有一个视图控制器,它有两个UILabel和一个UIButton居中并堆叠在底部。 UILabels的外边缘和视图边界之间有20个像素,每个控件之间有10个像素。

当我将设备旋转到横向时,标签保持居中,并且填充和间距保持一致,但标签的高度不会改变 - 如果标签之前可以包含三行,则它仍然是三行尽管文本只是新方向的两行

我在Stack Overflow上看到过类似的问题,有关如何查找和更改标签高度的说明,但是如果标签仍然是较大的高度,这些问题似乎会留在标签的左上角。尽管存在限制,但具体说明两个标签之间应该只有10个像素。我假设这是因为我发现的解决方案改变了框架的高度,但这也迫使原点保持不变。

除了计算高度和设置新的正确宽度之外,我还可以添加更多代码来计算标签的新原点,但对于必须相当普遍的东西,必须有一种更简单的方法。

有没有办法让标签遵循约束条件,并忽略它们的集合来源?或者让标签正确改变大小和位置以适合他们的文字?

这是我目前正在使用的代码:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    CGSize maximumLabelSize = CGSizeMake(self.view.frame.size.width - 40, CGFLOAT_MAX);

    CGSize expectedLabelSize = [helpMessageText sizeWithFont:[helpMessageLabel font] constrainedToSize:maximumLabelSize lineBreakMode:[helpMessageLabel lineBreakMode]];
    CGRect newFrame = helpMessageLabel.frame;
    newFrame.size.height = expectedLabelSize.height;
    [helpMessageLabel setText:helpMessageText];
    [helpMessageLabel setFrame:newFrame];
    NSLog(@"%f", newFrame.size.height);
    [helpMessageLabel setBackgroundColor:[UIColor blueColor]];

    expectedLabelSize = [errorMessageText sizeWithFont:[errorMessageLabel font] constrainedToSize:maximumLabelSize lineBreakMode:[errorMessageLabel lineBreakMode]];
    newFrame = errorMessageLabel.frame;
    newFrame.size.height = expectedLabelSize.height;
    [errorMessageLabel setText:errorMessageText];
    errorMessageLabel.frame = newFrame;
    NSLog(@"%f", newFrame.size.height);
    [errorMessageLabel setBackgroundColor:[UIColor greenColor]];
}

以下是应用程序的外观,没有特殊代码: Here's what the app looks like with no special code

以下是使用上述代码在应用中的应用程序: Here's what the app looks like in landscape with the above code!

这更接近我想要的样子: Here's closer to what I'd like it to look like

0 个答案:

没有答案