我有一个视图控制器,它有两个 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]];
}
这是应用程序在没有特殊代码的情况下的样子:
以下是使用上述代码的应用程序在横向中的样子:
这里更接近我想要的样子: