问题标签 [uitableviewautomaticdimension]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
427 浏览

ios - 使用 UITableViewAutomaticDimension 后行高度相同

我正在尝试根据该单元格中标签中的文本行使表中的所有行都有自己的行高。我的出发点是这里的 Wenderlich 教程: https ://www.raywenderlich.com/129059/self-sizing-table-view-cells

我正在使用UITableViewAutomaticDimension您在下面看到的方法。但是由于某种原因,当我运行模拟时,行的高度都相同。我在代码中为估计的行高输入的数字或在情节提要的表格视图单元格中为行高输入的数字似乎并不重要。所有行的高度总是相同的。

我在这里想念什么?谢谢大家!

` 约束 模拟

0 投票
0 回答
526 浏览

ios - 以编程方式向 UITableCellView 添加约束

在我针对 iOS 8 的项目中UITableView,我有一个自动可变行高。在情节提要中,我定义了一个UITableViewCell设置了大多数约束的原型。由于单元格内容会根据要显示的对象而略有不同,因此我决定不在情节提要中创建多个原型,而是以编程方式进行必要的更改。我在tableView(_:cellForRowAtIndexPath).

导致我出现问题的原因是创建缺少的约束。这是不可能的,tableView(_:cellForRowAtIndexPath)因为尚未设置单元格子视图(即它们还没有超级视图),因此我调用cell.setNeedsUpdateConstraints()并在覆盖内设置它们cell.updateConstraints()。这种方法大多有效,但以下情况除外。表格视图有一个选择 segue 将视图控制器推送到导航堆栈上;然后在由 unwind segue 触发的操作方法中,我想为触发选择 segue 的行重新加载单元格,但是调用tableView.cellForRowAtIndexPath(_)其中一个会在内部引发此异常cell.updateConstraints()

或此警告:

这有效地导致一些单元格的估计行高和它们的子视图都搞砸了。

在这种特殊情况下,似乎尚未设置单元格子视图。有人知道这个问题的解决方案吗?

0 投票
0 回答
493 浏览

ios - 在 UITableViewCell 的 layoutSubviews() 方法中修改布局时如何获得正确的自动行高计算?

我有一个高度可变的单元格,在 Interface Builder ( )UITableView中使用自动布局进行布局。rowHeight = UITableViewAutomaticDimension当用户旋转设备时,我会在单元格内执行一些手动布局更改,这些更改会影响intrinsicContentSize单元格的子视图之一。由于这些更改取决于该特定子视图的初始框架,因此我只能在布局引擎解决约束并将正确的框架应用于新(旋转)布局的所有子视图后应用这些更改。这发生在layoutSubviews()方法内部。因此,要应用我的手动更改,我会覆盖该方法并首先调用超级实现。

现在的问题是我的手动布局更改可能还会更改单元格的高度。因此,我需要一种方法来通知表格视图,在(自动)高度计算返回之前,此单元格需要第二次布局传递。(否则表格视图将只使用它在手动布局更改之前计算的行高。)

通常,您通过setNeedsLayout()调用需要另一个布局传递的视图来使布局无效来做到这一点。但是,我不能从layoutSubviews()方法内部执行此操作,因为它会导致布局传递的无限循环并使应用程序崩溃。

所以我试图找出一种方法,如果布局在这个特定的调用中发生了变化,layoutSubviews()并提出了这种方法:

(在本例中,这imageView是我的布局所依赖的单元格的子视图。)

运行这段代码时,我意识到if分支内的代码永远不会执行,即方法imageView内的大小永远不会改变layoutSubviews()。但它确实改变了——只是在不同的时间。

这与我对自动布局的理解不一致:

视图始终负责布置其子视图,即适当地设置它们的框架,这是在layoutSubviews().


所以这是我的问题:

  1. 为什么系统会从方法外部更改图像视图的大小layoutSubviews()

更重要的是:

  1. 在计算单元格的行高时,如何让表格视图运行第二次布局传递?
0 投票
4 回答
4582 浏览

ios - 在 UITableViewCell 中加载的 Nib 文件 UIView 不会拉伸

我有一个可通过 nib/xib 文件重用的 UIView。我想加载它并填充一个 UITableViewCell,它将用于自调整大小的 UITableView。全部带有自动布局。

大多数都很好,但似乎加载的 UIView 使用它周围添加的约束来缩小 UITableViewCell 的 contentView。这对高度有好处,但我不希望这个宽度。

UITableViewCell 的外观 忽略下面的灰色单元格,这只是一个选定的单元格。

在 RowView0002.xib 中,我将 rootviews 背景设置为红色,在其两侧添加了一个带有 4 个约束的 UILabel,如您所见。我都尝试将 rootView 设置为类 RowView 以及它的文件所有者。两者都“有效”。

知道如何让 contentView 与 UITableView 匹配吗?

*编辑1:绿色是UILabel的背景。红色是 nib 文件的背景。运行应用程序后,View heirarcy 是: UITableViewCell > ContentView > RowView > NibFileView (red) > UILabel (green)

检查视图层次结构表明所有约束都按预期设置。但是 UITableViewContentView 具有与看到的总大小相匹配的约束(错误):

0 投票
1 回答
1067 浏览

ios - UITableView 动态单元格高度性能

我在类似聊天的 UITableview 中遇到了性能问题。我有三种类型的细胞:

  • 文本
  • 图片/视频
  • 声音的

目前我正在处理动态单元格高度缓存字典中的大小:

它工作得不是很好,也许滚动不是那么迟钝,但是当我滚动到 UITableView 的底部时

我的应用程序瞬间冻结。我尝试为单元格设置静态高度并且没有发生冻结。

在 cellForRowAtIndexPath 中,我将消息类型的正确 xib 出列,设置用于“天”的标题标签以及基于日期的上一条消息的间距。之后,我调用单元格的配置方法,在其中格式化并显示消息文本,或者使用 SDWebImage 显示远程/本地图像(必要时在下载后)。

关于如何正确处理单元格高度计算的任何建议?

0 投票
3 回答
165 浏览

swift - UITableViewAutomaticDimension-10.0

我正在尝试将最后一个 tableView 行的高度设置为与其他行不同。而不是创建一个新的单元格等,我想从这个单元格的高度“切割”10px。因为我已经为高度设置了自动尺寸,所以我不能使用一个常数值。

这是它的样子:

我想要这样的东西,但这不起作用:

0 投票
3 回答
400 浏览

ios - 基于两个子视图高度的自调整 TableView 单元格

表视图说明
tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = 60.0

单元格描述
我在 ContainerView 和 1 个 ImageView 中有一个带有 2 个标签(标题、描述)的单元格,如下所示。单元格高度将根据描述标签的内容而有所不同。
所有视图的约束

我应该处理两种情况

  1. ContainerView.height 大于 (ImageView.height + ImageView.Top + ImageView.Bottom)。这里单元格的高度将基于 ContainerView.height
  2. ContainerView 高度小于 (ImageView.height + ImageView.Top + ImageView.Bottom)。在这里,我希望 Cell 应该考虑 (ImageView.height + ImageView.Top + ImageView.Bottom) 作为高度,并使 ContainerView 垂直居中于 Cell。
    两种情况下的预期结果

问题
如果我为第一种情况设置约束,那么第二种情况不起作用,反之亦然(我知道通过删除 ContrainerView.Top、Bottom 并使其垂直居中到 SuperView 情况 2 结果可以实现)

有没有办法通过使用同一组 IB 约束和 UITableViewAutomaticDimension 在这两种情况下实现预期结果?

0 投票
1 回答
158 浏览

ios - UITableViewAutomaticDimension not correctly sizing UIIImageView

I am trying to set the UITableViewCell height based on what is in the cell (Primarily the image). It looks fine on an iPhone 7 Plus, however any smaller devices produce something similar to this.

My code in MainViewController:

My constraints: enter image description here

What am I doing wrong? I have the height and width constraints set to 'Greater or Equal to' 200. The height and width of the UIImageView on the Storyboard are 370x370

0 投票
2 回答
611 浏览

ios - UITableViewAutomaticDimension 使空单元格太大

我正在使用 UITableViewAutomaticDimension 制作 TableView,但由于某种原因,最后一个空白单元格之后的“额外”空白单元格与最后一个带有文本的单元格的尺寸相同。我希望空白单元格的大小都较小,除非填充需要自动调整大小的文本来放大它。我怎样才能改变这个?任何帮助,将不胜感激。我对此很陌生。谢谢大家!请参阅下面的 TableView 屏幕截图。我添加了我的代码以供参考。

截屏

0 投票
1 回答
2064 浏览

ios - UITableView cellForRowAt vs willDisplay

我有点沮丧。我有一个UITableView带有UITableViewAutomaticDimension单元格的 iOS 10 项目。我正确设置了约束。

最初我在里面映射我的细胞

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

一切正常,但后来我读了一篇文章:https ://medium.com/ios-os-x-development/perfect-smooth-scrolling-in-uitableviews-fd609d5275a5#.4rnbc4vyg并将我的数据映射移动到

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)

在此之后,我的自动布局单元停止正常工作。

我的理解是 at height 是在 after cellForRowAtbut before计算的willDisplay,所以当我映射willDisplay高度时,我的单元格已经设置好了,我需要重新加载它(这不好)。

任何人都可以证明/解释这一点吗?

更新:

发布一个问题后,我找到了这篇文章:https ://tech.zalando.com/blog/proper-use-of-cellforrowatindexpath-and-willdisplaycell/