自动布局以动态调整 UILabel 大小不起作用

Posted

技术标签:

【中文标题】自动布局以动态调整 UILabel 大小不起作用【英文标题】:Autolayout to Dynamically Resize UILabel not working 【发布时间】:2018-04-19 08:10:12 【问题描述】:

我尝试用各种可能的方式创建动态 UILabel,但它不适合我。

我已经使用 .xib 文件创建了 UITableViewCell,如下所示:

并使用UITableViewAutomaticDimension 在选项卡表视图单元格上单击动态高度上的单元格。 它运行良好,但我希望黄色的 UIlabel 应该动态更新它的大小。我已经将所有自动布局设置为标签。

我已添加:

label1.lineBreakMode = .byWordWrapping
label1.numberOfLines = 0

也尝试过:

label1.sizeToFit()

它没有更新它的标签高度 但是当我在分配的 Lebel 字符串的末尾添加换行符时,它会自动调整标签高度,如下图所示,但仍然没有显示所有文本。

8 座会议室、8 座会议室、12 座会议室(WProjector)

还有其他方法可以动态调整 UILabel 的大小吗?

或者

我应该使用NSLayoutConstraint 来增加高度吗?

【问题讨论】:

似乎没有底部约束来超级视图尝试将标签底部约束设置为超级视图 我已经为 superview 添加了底部约束。 移除高度限制。 @PremaJanoti 有高度或没有高度相同的结果。 能否请您显示“预订类型”标签的约束条件? 【参考方案1】:

最后,我能够找到为什么我的 Autolayout to Dynamically Resize UILabel 不起作用。

我几乎浪费了一周的时间来寻找和尝试不同的解决方案。 这是与项目中使用的 UILabel 扩展相关的问题。 我已经推荐了一些 git hub 项目以在屏幕上显示 toast 消息。在 toast 视图中,他们扩展了处理多行 toast 消息的功能。

这是使用开源代码的主要缺点。 我从中学到的是,在添加到项目之前,我们需要了解开源代码。

注意:在添加到您的项目之前,请学习并理解开源代码。开源代码可能会对您项目中的某些功能产生一些不良影响。

感谢所有回复。

【讨论】:

我在没有第三方库的情况下得到了相同的行为。这不应该是公认的答案。 就是这样!扩展 UILabel 覆盖了 intrinsicContentSize 并弄乱了所有标签的高度计算!非常感谢!【参考方案2】:

在您的自定义UITableViewCell 中,您需要直接为此特定标签设置preferredMaxLayoutWidth。但仅当单元格已经可见并调整为当前屏幕大小时。

例如:

class YourCustomTableViewCell: UITableViewCell 

    override func layoutSubviews() 
      label1.preferredMaxLayoutWidth = label1.frame.size.width
      super.layoutSubviews()
    


【讨论】:

Value of type 'UILabel' has no member 'width' ?【参考方案3】:

您可以尝试使用自动布局,只需将顶部、底部、前导和尾随约束添加到标签并从属性检查器将标签的行设置为 0。

查看下面的图片

这可能会起作用..!

【讨论】:

您可以看到有问题的图片 1 我已经设置了所有标签的所有自动布局。还尝试使用设置高度或不使用高度。当字符串分配给标签时它不起作用,但如果我添加换行符它会起作用。 我认为您的 tableview 单元格大小不会根据标签的高度而增加,只需尝试动态地将标签高度赋予单元格 它已经是动态的了。在用户单击 tableview 单元格后,我显示了这个自定义 UITableViewCell。如果它不是动态的,那么当我在字符串末尾附加换行符时它将不起作用。 标签的运行时高度为 81.5 那个特定表格视图单元格的高度是?【参考方案4】:

以下解决方案的输出 -

试试看 -

tableView.estimatedRowHeight = 50
tableView.rowHeight = UITableViewAutomaticDimension

label1.lineBreakMode = .byWordWrapping
label1.numberOfLines = 0

并正确添加约束,参考请看附图。

对于动态标签-

对于预订类型标签-

对于其他标签-

【讨论】:

感谢您的回答。我已经尝试过了,它可以正常工作,但是带有 .xib 文件的单元格不能正常工作。我想在多个视图中使用同一个单元格。

以上是关于自动布局以动态调整 UILabel 大小不起作用的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式根据行数动态调整 UILabel 的大小

使用自动布局自定义集合视图单元格的动态高度

文本为空字符串时,自动布局UILabel的动态高度计算不起作用?

使用 UILabel 以编程方式自动布局不起作用

使用固定大小的子视图和自动布局调整 UIView 的大小不起作用

动态调整 collectionViewCell 的常量以在自动布局中使用