如何修改 heightForRowAtIndexPath 使其调整到其中的 textview 的高度,同时在 textview 为空时保持最小高度?
Posted
技术标签:
【中文标题】如何修改 heightForRowAtIndexPath 使其调整到其中的 textview 的高度,同时在 textview 为空时保持最小高度?【英文标题】:How can I modify the heightForRowAtIndexPath so that it adjust height to the textview in it,but also keep the minimum height when textview is empty? 【发布时间】:2016-10-16 14:49:11 【问题描述】:我有一个 tableView,里面有静态单元格。一个单元格包含地图、UITextView
和其他控件:
此文本视图具有以下约束:
到目前为止,我将heightForRowAtIndexPath
设置为该单元格的静态值:
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
if indexPath.row == 0
return 311;
但是当文本更长时,文本视图 - 而不是增长 - 包含里面的文本并且用户必须滚动它。 基本上它的高度总是311。我想改一下,让整个单元格适应textView的内容。
我尝试将return 311
更改为return UITableViewAutomaticDimension
,但是当没有文本时,单元格会缩小并且右侧的控件不可见。
所以我的问题是 - 如何根据里面的文本设置单元格的动态高度,同时保持 311 的最小高度?
【问题讨论】:
【参考方案1】:如果您只是显示文本而不以任何方式对其进行编辑。您应该尝试使用 UILabel,如果正确添加了约束,UITableViewAutomaticDeminsions 将按预期工作。
你可以做的是给 textView 添加一个高度约束,然后根据你获得的字符串的大小来增加它的大小。当然你也需要调用 layoutIfNeeded ! UITableViewAutomaticDimensions 应该负责其余的工作。
【讨论】:
您不需要手动更改约束的高度。标签自动具有较低优先级(默认情况下)的固有大小约束,将其设置为显示所有文本所需的***别。 我的意思是如果他想使用textView!在这种情况下,他将不得不改变约束的高度。 UILabel 会自行调整大小。 各位感谢您的所有意见,我在尝试使用 TextView 时遇到了很多困难,但后来我决定尝试 UILabel 并且令人惊讶的是 - 它奏效了。然后我还使用了来自***.com/questions/1054558/… 的提示,现在我的 UILabel 看起来像 UITextView 并且可以相应地扩展表格。【参考方案2】:在文本视图中添加高度约束 >= 最小值(当单元格为 311 时会是什么,然后将单元格高度设置为自动。
【讨论】:
在我的情况下最小值是 95,我添加了Height >= 95
约束,但是当文本很大时 - 这个约束基本上保持在 95 并且里面的 textview 是可滚动的。对我来说奇怪的是,在cellForRowAtIndexPath
中我禁用了cell.textView.scrollEnabled = false
的滚动,但它仍然可以滚动
您只显示文本是真的吗?如果是这样,请更改为标签并使用高度约束。
这里的标签会支持多行吗?
是的,您可以将numberOfLines
属性(在界面生成器中称为Lines
)设置为0,它将根据需要扩展到尽可能多的行。
您应该也可以使用文本视图来执行此操作。我刚刚编写了一个演示项目,其中包含未选中“启用滚动”的文本视图、>= 显式高度约束和自动调整单元格大小,并且可以正常工作。【参考方案3】:
我不完全理解你的问题,但根据你所说的也许这可行:
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
if UITableViewAutomaticDimension > 311
return UITableViewAutomaticDimension
else
return 311
我只是检查单元格是否应该大于最小值 311,然后返回最小值或更大的值
【讨论】:
我试过了,但没用...我在那里添加了print(UITableViewAutomaticDimension)' just before the if statement and I'm getting
-1`,不知道为什么:|
这很奇怪,但在你的问题中你说它有效,至少在有文字的时候?
也许添加@Sahil 的答案也会有所帮助,正如他在问题下方解释的那样
hm @Eric,很抱歉没有很好地描述我的问题...我尝试只返回UITableViewAutomaticDimension
,但是文本根本不可见,单元格在地图的末尾结束
在我的问题中用textView.frame.height
两次替换UITableViewAutomaticDimension
是否有效?以上是关于如何修改 heightForRowAtIndexPath 使其调整到其中的 textview 的高度,同时在 textview 为空时保持最小高度?的主要内容,如果未能解决你的问题,请参考以下文章