是否可以制作一个 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
中,但我发现没有文本视图可以调整其容器的大小以适应可变的多行。
UILabel
和 UITextView
在 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,使其可以“复制”,但不能编辑
在 UITableViewCell ios 中制作动态 UILabel 高度/宽度?