是否可以制作一个 UILabel、UITextView 或类似的东西,它总是在不截断的情况下调整其高度以适应其在 Interface Builder 中的内容?

Posted

技术标签:

【中文标题】是否可以制作一个 UILabel、UITextView 或类似的东西,它总是在不截断的情况下调整其高度以适应其在 Interface Builder 中的内容?【英文标题】:Is it possible to make an UILabel, UITextView, or similar that always resizes its height to fit its content in Interface Builder without truncating? 【发布时间】:2017-01-13 06:32:15 【问题描述】:

我有一个 xib 用于表格单元格(可变高度,在垂直 UITableView 中),每个单元格都填充了具有图像和可变长度文本的数据,但可能具有不同的行数。我尝试将它们包装在 horizontal UIStackView 中,但我发现没有文本视图可以调整其容器的大小以适应可变的多行。

UILabelUITextView 在 Interface Builder 中看似任意地截断它们的内容,而调整图像的高度会使 UIStackView 容器相应地增长和缩小以包裹其内容。

是否有任何视图或方法可以添加自定义视图,根据其文本长度动态调整其高度而不截断?

【问题讨论】:

选择 UILabel 并在属性检查器中将 numberOfLines 设置为 0 并将包装模式设置为 word wrap。如果您正确设置了约束,那么它将始终调整大小以适应其内容。我不确定它在堆栈视图中是如何工作的,但在普通的 UIView 中它工作正常。 至少在Interface Builder中,更改属性侧边栏中的文本时它不会调整大小,即使行为0并且设置了word wrap 它甚至应该在界面生成器中。可能某些约束不允许它正确调整大小,因为推断约束的优先级低于明确定义的约束,请尝试将 UILabel 的高度设置为 >= 5。 【参考方案1】:

我想这就是你想要的:)

有很多关于如何实现它的教程:)无论如何,请在这里解释步骤,希望对您有所帮助:)

提示:

利用 tableView 的 estimatedRowHeight 并将其设置为 UITableViewAutomaticDimension 并让 UITableView 为你做魔法:)

第 1 步:

在 UITableViewController 上创建单元格 xib 或创建原型单元格。无论你觉得舒服。创建一个单元格 xib,ios 希望您在 ViewDidLoad() 中使用可重用标识符注册 xib 我打算避免它,因此在 UITableViewController 中创建一个原型单元格:) 让我们为其提供一个可重用标识符:)

第 2 步:

拖动 UIImageView 和 UITextView 并应用约束,如图所示:) 这个答案假设你的 imageView 高度是固定的 :) 如果它没有稍微调整答案:)

现在 imageView 有 H:|-(8)-[ImageView]-(8)-|和 V:|-(8)-[ImageView] 最后是 100 的高度限制 :)

现在在它下面添加 TextView :)

TextView 没有高度限制 :) 它只有顶部、左下角和右下角限制 :)

第 3 步:

现在选择 textView,并仔细取消选中启用滚动,显示水平和垂直指示器:)

第 4 步:

在你的 tableViewController 或你的 viewController 的 viewDidLoad 中写:)

self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 44.0;

第 5 步:

现在坐下来,放松一下,运行代码,兴奋起来,请回来接受答案:)

编辑

如果想知道我还可能在 UITableViewController 中写了什么 :) 只是 tableView 数据源方法numberOfSections,numberOfRowsInSection,cellForRowAt 仅此而已。不需要其他任何东西:)

【讨论】:

以上是关于是否可以制作一个 UILabel、UITextView 或类似的东西,它总是在不截断的情况下调整其高度以适应其在 Interface Builder 中的内容?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过长按制作textField或UILabel,使其可以“复制”,但不能编辑

如何制作 URL/电话可点击的 UILabel?

在 UITableViewCell ios 中制作动态 UILabel 高度/宽度?

为它后面的 UIViews 制作一个 UILabel 块触摸事件

在 UILabel 之后制作 UIButton Wrap

如何制作具有动态变化和循环文本的 UILabel?