当前位置: 首页 > 面试题库 >

iOS 8自动单元格高度-无法滚动到最后一行

魏英勋
2023-03-14
问题内容

我正在使用iOS 8新的自动调整大小的单元格。外观上效果很好-每个单元格都有合适的大小。但是,如果我尝试 滚动到最后一行
,则表视图似乎不知道其正确大小。这是一个错误还是有解决办法?

重新创建问题的方法如下:

使用这个项目-TableViewCellWithAutoLayoutiOS8(从该SO答案引用),我按预期得到了自动调整大小的单元格。

但是,如果我要调用 scrollToRowAtIndexPath 函数,如下所示:

tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: model.dataArray.count - 1, inSection: 0), atScrollPosition: .Bottom, animated: true)

没有到达最后一行 -它只 能使 我绕到一半。

即使尝试使用这样的较低级别的函数,也是如此:

tableView.setContentOffset(CGPointMake(0, tableView.contentSize.height - tableView.frame.size.height), animated: true)

结果与预期不符,将无法解决。如果我单击多次或等待片刻,最终它将到达正确的位置。似乎tableView.contentSize.height的设置不正确,因此iOS“不知道”最后一个单元格在哪里。

将不胜感激。

谢谢


问题答案:

更新:2015年6月24日

自iOS 9.0 SDK以来,Apple已解决了大多数此类错误。从iOS 9 beta
2开始,所有问题均已修复,包括滚动到没有动画的表格视图的顶部和底部,以及在表格视图reloadData的中间滚动时调用。

以下是尚未解决的其余问题:

  1. 当使用较大的估计行高时,滚动到带有动画的最后一行会导致表格视图单元格消失。
  2. 当使用较小的估计行高时,使用动画滚动到最后一行会导致表格视图过早完成滚动,从而在可见区域下方留下了一些单元格(最后一行仍在屏幕外)。

针对与动画滚动有关的这些问题,已提交了新的错误报告(rdar:// 21539211)。

原始答案

这是一个带有表格视图行高估算值的Apple bug,自从iOS 7首次引入此功能以来就存在。我直接与Apple
UIKit工程师和开发人员就此问题进行了合作-他们承认这是一个错误。错误,但没有任何可靠的解决方法(缺少禁用行高估算),并且似乎对其修复没有特别的兴趣。

请注意,该错误以其他方式表现出来,例如,当您reloadData在部分或完全向下滚动(例如contentOffset.y,明显大于0)滚动时调用时,表格视图单元格消失了。

显然,对于iOS 8自定义单元,行高估算至关重要,因此Apple确实需要尽快解决这一问题。

我在2013年10月21日以Radar#15283329的形式提交了此问题。 请提供重复的错误报告,以便Apple优先解决问题。

您可以附加这个简单的示例项目来演示该问题。它直接基于Apple自己的示例代码。



 类似资料:
  • 我有一个,其中包含使用自动布局在故事板中定义的自定义。单元格有几个多行。 似乎可以正确计算单元格高度,但对于前几个单元格,标签之间的高度没有正确划分。滚动一点后,一切都按预期工作(即使是最初不正确的单元格)。 有没有什么我可能会遗漏的,导致自动布局在最初的几次无法完成它的工作? 我创建了一个示例项目来演示这种行为。

  • 我有一个表格视图,每个单元格都有自己的高度,因此不适合使用。相反,现在我使用和。这意味着它调用单元格上的函数来确定它的高度。这一切都很好。 问题是当你重新加载屏幕上的单元格时。例如,向下滚动以显示单元格10,然后重新加载单元格10,效果很好。但是当您开始向上滚动,经过您已经看到的单元格时,它会恢复到每个单元格的estimatedRowHeight,完全不考虑< code>sizeThatFits,

  • 我使用JavaFX ListView作为聊天应用程序的聊天室主体。当消息到来或正在发送时,我会添加到listview。这很好,但我总是不得不滚动找到最新的消息。有没有任何方法,我可以自动滚动到底部,以便显示最新的消息,而不必一直向下滚动?

  • 问题内容: 我在这样的表格视图中有一个数字列表。 如您所见,数字是重复的。让我们考虑一组重复的数字作为一个组。因此,有一组1,一组2,依此类推。 我想做的是当应用启动时,我需要自动滚动到指定组的开始位置。在进一步解释之前,这是到目前为止的代码。 import UIKit 我为变量分配了值12 。这意味着当应用程序启动时,我希望表格视图自动滚动到 12s组单元格的开始。 但是目前,我的代码执行的是滚

  • 我有一个带有一堆单元格的表视图(自定义单元格,它只有它的内容视图)。 在 中,我正在向自定义单元格的content视图添加一个预定义的UIView(它有几个子视图)。我之前为UIView及其子视图设置了所有约束。 最后但并非最不重要的是,我为我的自定义单元格的内容视图(superview)和UIView设置了垂直和水平约束,UIView是在(subview)之前添加的。 约束字符串如下所示: 不幸

  • 我需要显示一组具有不同高度的collectionViewCells。视图太复杂,我不想手动计算预期的高度。我想强制自动布局来计算单元格高度 在之外调用会破坏ColltionView并导致其崩溃 另一个问题是单元格不在单独的xib中,所以我无法手动实例化临时单元格并将其用于高度计算。 对此有什么解决办法吗? 编辑: 一旦被调用,就会发生崩溃。如果我不调用该方法并返回大小,则一切正常,单元格显示为没有