自动布局以动态调整 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的动态高度计算不起作用?