我应该如何以编程方式(和使用哪种方法)配置高度取决于其文本的UILabel?我一直在尝试使用Storyboard和代码的组合进行设置,但无济于事。设置sizeToFitlineBreakMode时,每个人都建议numberOfLines。但是,无论我将代码放在viewDidLoad:viewDidAppear:还是viewDidLayoutSubviews中,我都无法正常工作。我要么将框设置得太小而不能容纳较长的文本,否则它不会增长,或者我将其设置得太大而不会收缩。

最佳答案

请注意,在大多数情况下Matt's solution可以正常工作。但是,如果对您不起作用,请进一步阅读。

要使标签自动调整高度,您需要执行以下操作:

  • 设置标签
  • 的布局约束
  • 将高度限制设置为低优先级。它应该低于ContentCompressionResistancePriority
  • 设置numberOfLines = 0
  • 将ContentHuggingPriority设置为高于标签的高度优先级
  • 设置label的preferredMaxLayoutWidth。标签使用该值来计算其高度

  • 例如:
    self.descriptionLabel = [[UILabel alloc] init];
    self.descriptionLabel.numberOfLines = 0;
    self.descriptionLabel.lineBreakMode = NSLineBreakByWordWrapping;
    self.descriptionLabel.preferredMaxLayoutWidth = 200;
    
    [self.descriptionLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
    [self.descriptionLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
    [self.descriptionLabel setTranslatesAutoresizingMaskIntoConstraints:NO];
    [self addSubview:self.descriptionLabel];
    
    NSArray* constrs = [NSLayoutConstraint constraintsWithVisualFormat:@"|-8-[descriptionLabel_]-8-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(descriptionLabel_)];
    [self addConstraints:constrs];
    [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-8-[descriptionLabel_]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(descriptionLabel_)]];
    [self.descriptionLabel addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[descriptionLabel_(220@300)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(descriptionLabel_)]];
    

    使用界面生成器
  • 设置四个约束。高度限制是强制性的。
  • 然后转到标签的属性检查器,并将行数设置为0。
  • 转到标签的大小检查器,并增加垂直ContentHuggingPriority和垂直ContentCompressionResistancePriority。
  • 选择并编辑高度约束。
  • 并降低高度约束优先级。

  • 享受。 :)

    关于ios - UILabel sizeToFit不适用于自动布局iOS6,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16009405/

    10-10 20:46