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