多线UILabel高度与Autolayout在景观中更高

时间:2014-05-14 18:14:10

标签: ios objective-c autolayout

请使用Autolayout查看动态多行UILabel的简单示例,该示例应强制其超视图增加高度。该示例在纵向方向上工作正常,而在横向方向上,UILabel在高度上增长得太多。

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

我用非常浅灰色的颜色标记了标签的背景,因此很明显标签的顶部和底部边距比纵向模式大得多。有人可以建议我如何在景观中获得具有相同顶部和底部边距的标签?感谢。

enter image description here

- (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];
}

2 个答案:

答案 0 :(得分:4)

我认为你用多线标签和自动布局来击中特定的东西。有关详细说明,请参阅Advanced Auto Layout Toolbox(多行文本的内在内容大小)。

快速修复是将它放在视图控制器中:

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

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

答案 1 :(得分:0)

我已经通过直接计算UILabel方法中的boundingRectWithSize:高度解决了这个问题,但这是避免使用Autolayout的目的的捷径,所以我仍然会对此提出任何反馈。

NSDictionary *attributes = @{NSFontAttributeName : [UIFont systemFontOfSize:16.0]};
CGRect textLabelRect = [self.myTextLabel.text boundingRectWithSize:CGSizeMake(self.view.bounds.size.width - 40.0, 9999.0) options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:attributes context:nil];

CGFloat height = textLabelRect.size.height + someMagicNumber;