【问题标题】:How to scroll to the bottom of a UITableView on the iPhone without seeing the scroll如何在 iPhone 上滚动到 UITableView 的底部而不看到滚动
【发布时间】:2019-10-12 18:13:01
【问题描述】:

我有一个UITableView,其中填充了可变高度的单元格。当视图被推入视图时,我希望表格滚动到底部。

我目前有以下功能:

[self.table scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:NO];

我使用自动布局、动态表格单元格和UITableViewAutomaticDimension 作为行高。我设置estimatedRowHeight = 100

上面的代码在viewDidLoad 中工作正常,但是这有一个不幸的副作用,即当视图首次出现时显示表格的顶部然后跳到底部。如果表格视图可以在它出现之前滚动到底部,我会更喜欢它。

请注意:我正在从核心数据加载数据。

任何指导都将不胜感激,即使只是告诉我我所拥有的一切都是可能的。

【问题讨论】:

  • 你试过在viewWillLayoutSubviews中调用滚动功能吗?
  • 是的。但它的问题仍然存在。 @MarwenDoukh-MaruänDuch

标签: ios objective-c uitableview ios-autolayout uitableviewautomaticdimension


【解决方案1】:

理论上,调用的顺序是正确的:viewDidLoad 应该在视图渲染之前调用,所以我唯一想到的可能是scrollToRowAtIndexPath:atScrollPosition:animated: 是异步的。也许你可以用 UIScrollViewDelegate 做一些事情(记住,UITableView 继承自 UIScrollView) - https://developer.apple.com/documentation/uikit/uiscrollviewdelegate?language=objc

也许你可以做一些事情,比如在onLoad 上隐藏视图并在scrollViewDidScroll: 上显示它。我没有时间测试和粘贴 sn-p 但是...也许它有帮助:) 祝你好运!

【讨论】:

  • 感谢您的回答。有用 !!!。但是在低内存设备中,我再次面临这个问题。我不知道为什么它只发生在那里。它在 iPhone 8 及更高版本中运行良好,但在 iPhone 6s 中存在问题。
  • 同样在低性能设备中,隐藏/显示视图无法正常工作,因为用户可以看到延迟。
  • 呵呵老实说,我不认为 iPhone 6s 符合“低内存”的条件,我希望 iPhone 3GS 左右:) 但如果这是你的情况,请确保可见性的变化是scrollViewDidScroll: 回调的最后一行。这是唯一想到的事情,因为应该解决由于异步引起的竞争条件。
【解决方案2】:

这似乎很可靠...

- (void)viewDidLoad {
    [super viewDidLoad];

    self.tableView.estimatedRowHeight = 100;

    [self.tableView performBatchUpdates:nil completion:^(BOOL b) {
        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:numRows - 1 inSection:numSections - 1];
        [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:NO];
    }];

}

numRowsnumSections 替换为您的数据计数。

【讨论】:

    猜你喜欢
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多