gpt4 book ai didi

ios - scrollToRowAtIndexPath 没有正确处理最后一行

转载 作者:IT王子 更新时间:2023-10-29 08:18:59 37 4
gpt4 key购买 nike

我在使用 UITableView 时遇到问题,它似乎无法在使用 scrollToRowAtIndexPath:atScrollPosition:animated 时正确处理滚动到最后一行

这是我用来引起滚动的代码:

[self.tableView scrollToRowAtIndexPath:indexPath
atScrollPosition:UITableViewScrollPositionMiddle
animated:YES];

这是显示结果(和问题!)的屏幕截图:

UITableView scroll issue screenshot

如您所见,最后一行 (September) 没有完全滚动到 View 中;底部的几个像素被截断。

我试过使用 UITableViewScrollPositionNoneUITableViewScrollPositionTopUITableViewScrollPositionBottom 作为滚动位置,但它们都产生相同的结果。

我的单元格确实有 61.0f 的自定义单元格高度,这是当前在 Storyboard中设置的,但是添加了 UITableViewDelegate 方法 tableView:heightForRowAtIndexPath: 并返回相同的值也无济于事。

有什么方法可以让表格 View 滚动到最后一行让它完全可见吗?

编辑:

需要说明的是,我使用的是普通 UINavigationController 和普通 UITableViewController 作为 Root View Controller 。

编辑 2:

如果我使用 rectForRowAtIndexPath: 来确定该行的矩形,它实际上会为该行返回正确的矩形。但是,如果我随后使用该矩形调用 scrollRectToVisible:animated:,我会得到与上面相同的结果;底部的几个像素被截断。

最佳答案

好的,我已经成功解决了这个问题。

线索就在这个comment通过 Matt Di Pasquale关于一个半相关的问题。

事实证明,在 iOS 7 中,调用 viewWillAppear: 时 View 尚未布局,这意味着无法保证表格 View 的框架和边界是准确的。由于对 scrollToRowAtIndexPath:animated 的调用必须至少使用其中之一来计算偏移量,因此在我的例子中,为什么没有正确处理它是有道理的。

我认为在大多数情况下,人们不会遇到这个问题,因为他们的呈现 View Controller 可能与呈现的 View Controller 具有相同的边界。但在我的例子中,我展示了一个 View Controller ,它有一个可见的导航栏和一个状态栏,而另一个没有,因此有一个额外的 64pts 需要考虑。从这个控制台输出中可以看出:

2014-03-15 19:14:32.129 Capture[3375:60b] viewWillAppear, tv bounds: {{0, 0}, {320, 568}}
2014-03-15 19:14:32.131 Capture[3375:60b] viewDidLayoutSubviews, tv bounds: {{0, -64}, {320, 568}}

为了解决这个问题,我现在在 viewWillAppear: 中设置一个标志,表示有一个挂起的滚动,然后在 viewDidLayoutSubviews 中,如果设置了标志,我调用scrollToRowAtIndexPath:animated 并取消设置标志(因为此方法被多次调用)。这完美无缺。

希望这能帮助其他遇到此问题的人。

关于ios - scrollToRowAtIndexPath 没有正确处理最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22406045/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com