0

我有一个视图控制器,它有两个 UILabel 和一个 UIButton 居中并堆叠在底部。UILabel 的外边缘和视图边界之间有 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]];
}

这是应用程序在没有特殊代码的情况下的样子: 这是应用程序的外观,没有特殊代码

以下是使用上述代码的应用程序在横向中的样子: 这是使用上述代码的应用程序在横向中的样子!

这里更接近我想要的样子: 这里更接近我想要的样子

4

0 回答 0