当前位置: 首页 > 知识库问答 >
问题:

iOS 8使用UITextView自动调整UITableViewCell的大小

国言
2023-03-14

iOS 8为tableViews引入了一种基于内容自动调整单元格高度的方式(通过AutoLayout)。

// in viewDidLoad:
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 44.0

我已经开始处理标签、图像等了。

但是,我想不出一种方法,让表格视图单元格在单元格的文本视图发生变化时自动增长?

关于设置的更多信息:单元格内的UITextView对表视图单元格的contentView有水平和垂直约束。我还禁用了文本视图的滚动。

我还尝试手动更改单元格的高度约束,但单元格也不会采用这些更改。

共有3个答案

姜嘉荣
2023-03-14

必须通知< code > table view < code > text view 已经更改。其他帖子通常回答“静态”< code>textView问题。但是,如果您在表格中键入内容,单元格需要随着< code>textView的增长而增长。< code>textView通过禁用滚动来增长。通过将单元格的< code>textView的顶部和底部约束设置为单元格的< code>contentView的顶部和底部约束,单元格会增长。一旦表加载完毕,这就可以工作一次。然而,要让< code>tableView实时增长,您必须在< code>textView的< code>didChange委托调用中执行

func textViewChanged(onCell cell: YourCustomCell) {
    UIView.setAnimationsEnabled(false)
    tableView.beginUpdates()
    tableView.endUpdates()
    UIView.setAnimationsEnabled(true)
}

这会像你期望的那样工作。细胞会随着你的打字而增长,不会有“弹跳”。

壤驷德寿
2023-03-14

重新加载< code > uitextviewdeginediting 的< code > textviewdebeginediting:方法中的单元格

[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForItem:0 inSection:0]] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];

显然,您应该为您的单元格将indexpath更改为正确的路径。这将使单元格更新其约束并调整自身大小。

柳飞飙
2023-03-14

如果一切设置正确(自动布局约束),则无需自己计算任何内容。

您只需禁用UITextView的滚动启用属性,然后在< code>textViewDidChange上调用< code > table view . begin updates()和< code > table view . end updates()。

要获得详细的解释,请查看我写的一篇帖子,其中也包括一个工作示例项目。

 类似资料:
  • DynamicHeights是一个动态表格元素高度(动态TableViewCell)的例子。实际应用场景在iOS开发中会经常遇到不规律的TableViewCell,往往需要根据内容的多少而动态调整这些Cell的大小。在http://www.cimgf.com/2009/09/23/uitableviewcell-dynamic-height/ 中,有详细的解说开发的流程以及这么处理的原因。里面的大

  • Android最近增加了根据视图大小以及最小和最大文本大小调整TextViews文本大小的支持。 https://developer.Android.com/guide/topics/ui/look-and-feel/autosizing-textView.html 不幸的是,他们不支持EditTexts,那么EditText还有其他的替代方案吗?

  • 问题内容: 我有一个只有一个标签的自定义。当我在StackOverflow上阅读时,我还将Interface Builder中的行数设置为0。 这是视图控制器要使用的部分: 因此,不做任何更改-它仍然将文本省略为1行,并且我需要标签的行数尽可能多,并且单元格的大小也适合标签。 问题答案: 您需要使用自动调整大小的单元格。 在情节提要或xib中,必须确保在单元格中设置了适当的约束。不要在标签中设置预

  • 我在使用gmap组件时遇到了一个小问题:当我试图使组件可调整大小时(即在CSS的帮助下将地图的高度和宽度都设置为100%),组件会收缩,地图本身也会变得不可见。但如果设置了固定的高度/宽度,则组件工作良好。有没有一种方法可以自动调整GMAP的大小?

  • 所以,我试图在JavaFX中显示一个棋盘。我将不得不执行不同的操作和绘制一些瓷砖,所以我选择使用画布为每个瓷砖和一个网格窗格为我以网格的方式排列它们。 不幸的是,我有一些问题与网格瓷砖的大小;我想让我的整个棋盘自动适应它的大小来适应场景。因此,我在GridPane的height和width属性中添加了一个ChangeListener,它负责调整瓷砖的大小。这只在窗口变大时起作用,当窗口缩小到更小的

  • 我有一个UIViewController,当设备旋转时,它只旋转其中的一些子视图。这在iOS7下运行良好,但在iOS8下会中断。UIView的边界似乎是由iOS8下的变换调整的。这是出乎意料的。 这里有一些代码: 我们在UIViewController上创建了一个类别来处理此行为。以下是相关代码: 以下是笔尖的外观: nib中名为pinned的UIView是pinnedControls的IBOut