自动布局的多行 UILabel 高度在横向上更高

Mar*_*les 1 objective-c ios autolayout

请查看这个UILabel带有 Autolayout的动态多线的简单示例,它应该强制其超级视图增加高度。该示例在纵向模式下运行良好,而在横向模式下UILabel,高度增长过多。

我在故事板中设置了约束,标签的垂直压缩和拥抱优先级是 1000,超级视图的优先级是 1。视图之间的所有其他顶部、底部、前导和尾随约束都是标准的。

我用非常浅的灰色给标签的背景着色,所以很明显标签的顶部和底部边距比纵向模式大得多。有人可以建议我如何在横向中获得具有相同顶部和底部边距的标签吗?谢谢。

在此处输入图片说明

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.myTextLabel.text = @"iPhone 6 rumoured to have larger display.";
}

- (IBAction)button:(UIButton *)sender
{
    if (!self.flag) {
        self.innerHeightConstraint.constant = 120.0;
        self.myTextLabel.text = @"iPhone 6 rumoured to have larger, 1704 x 960 display. A new report indicates that Apple's testing it.";
        self.flag = YES;
    } else {
        self.innerHeightConstraint.constant = 60.0;
        self.myTextLabel.text = @"iPhone 6 rumoured to have larger display.";
        self.flag = NO;
    }
    [self.view layoutIfNeeded];
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*rve 5

我认为您正在使用多行标签和自动布局来解决特定问题。有关详细说明,请参阅高级自动布局工具箱(多行文本的内在内容大小)。

快速修复是把它放在你的视图控制器中:

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    myLabel.preferredMaxLayoutWidth = myLabel.frame.size.width;
    [self.view layoutIfNeeded];
}
Run Code Online (Sandbox Code Playgroud)

尽管我建议在链接中描述的容器视图解决方案中使用自定义标签类或覆盖 layoutSubviews。