【问题标题】:iOS: Dynamically adding a multiline UILabeliOS:动态添加多行 UILabel
【发布时间】:2012-10-15 18:17:30
【问题描述】:

我在动态添加多行 UILabel 时遇到问题。这是我得到的结果:

我希望“摘要”框中的标签自然换行。这是我用来添加标签的代码:

-(void)setSummary{
    summaryContentLabel = [[UILabel alloc] init];
    summaryContentLabel.numberOfLines=0;
    summaryContentLabel.lineBreakMode=NSLineBreakByWordWrapping;
    summaryContentLabel.text=self.summary;
    summaryContentLabel.font=[UIFont fontWithName:@"Helvetica" size:13.0];

    [summaryView addSubview:summaryContentLabel];
    [summaryContentLabel  setTranslatesAutoresizingMaskIntoConstraints:NO];
    NSDictionary *views = NSDictionaryOfVariableBindings(summaryView,summaryContentLabel ,summaryLabel);
    [summaryView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[summaryLabel]-5-[summaryContentLabel(==100)]-5-|" options:nil metrics:nil views:views]];

}

您会注意到这本书的标题完全按照我想要的方式包装。这是在 IB 中完成的。不幸的是,我必须在代码中添加这个标签。自动布局也是一项要求。

【问题讨论】:

    标签: iphone ios uilabel autolayout


    【解决方案1】:

    想通了。我需要为标签的宽度添加一个额外的约束,如下所示:

    [summaryView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[summaryContentLabel]-|" options:nil metrics:nil views:views]];
    

    【讨论】:

      【解决方案2】:

      可能是我迟到了,但无论如何我已经找到了解决方案。您需要为 summaryContentLabel 显式设置 preferredMaxLayoutWidth。例如:

      summaryContentLabel.preferredMaxLayoutWidth = 200;
      

      而且我注意到,如果您通过 xib 执行相同的视图布局,那么界面生成器将使用正确的值设置 preferredMaxLayoutWidth。

      【讨论】:

      • 可以通过Interface Builder设置preferredMaxLayoutWidth吗?
      • 只是隐式的。界面生成器将 PreferredMaxLayoutWidth 设置为初始标签宽度。
      【解决方案3】:

      将此代码用于多行标签:-

      -(void)set总结 {

      summaryContentLabel = [[UILabel alloc] init];
      summaryContentLabel.numberOfLines=0;
      summaryContentLabel.textAlignment   = UITextAlignmentLeft;
      summaryContentLabel.font=[UIFont fontWithName:@"Helvetica" size:13.0];
      [summaryView addSubview:summaryContentLabel];
      
      CGSize size = [self.summary sizeWithFont:[UIFont fontWithName:@"Helvetica" size:13.0] constrainedToSize:CGSizeMake(240, 99999) lineBreakMode:UILineBreakModeWordWrap];
      summaryContentLabel.frame=CGRectMake(72, 22, 240, size.height);  //set the frame according to your need
      summaryContentLabel.text=self.summary;
      

      }

      【讨论】:

        【解决方案4】:

        看起来您实际上并没有为您的 UILabel 设置帧大小。你总是可以这样做的:

        CGRectMake(10, 10, 280, 9999);
        

        对于高度,然后确保它适合而不是设置为 9999 的高度:

        [summaryContentLabel sizeToFit];
        

        【讨论】:

        • 我正在使用自动布局,所以我不允许调用 set frame。我在我添加的约束中设置标签的高度(它被设置为 100)。
        猜你喜欢
        • 1970-01-01
        • 2011-10-01
        • 2013-07-03
        • 1970-01-01
        • 2012-09-29
        • 1970-01-01
        • 2021-08-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多