【问题标题】:Strange behaviour of UITableView scrollToRowAtIndexPath:UITableView scrollToRowAtIndexPath 的奇怪行为:
【发布时间】:2010-07-09 20:34:15
【问题描述】:

我必须将 UITableViewinitial 滚动位置设置为第一行以外的行(例如,第二部分的第一行)。

在我的视图控制器的 viewDidLoad 我写:

- (void)viewDidLoad
{
    // self.view is a container view, not UITableView
    [super viewDidLoad];
    [table scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]
       atScrollPosition:UITableViewScrollPositionTop animated:NO];
}

当屏幕加载时,滚动位置不会立即设置。否则,当 animated 参数设置为 YES 时,将立即设置位置,而不使用任何动画。 发生了什么事?

为 UITableView 设置初始行位置的正确方法是什么?

【问题讨论】:

    标签: iphone cocoa-touch uitableview viewdidload


    【解决方案1】:

    最佳位置应该是 ViewDidAppear。此外,您应该调用 cellWillDisplay 中的滚动方法以确保。记得在调用滚动方法之前检查 indexPath

    【讨论】:

      【解决方案2】:

      只是摸不着头脑,但您是否尝试过将此代码放入 viewDidAppear{} 中?

      【讨论】:

        【解决方案3】:

        这在viewDidLoadviewWillAppear 中不起作用,因为那时很可能还没有填充表格(至少在我的情况下不是)

        一旦您的表加载并调用它,请尝试将其放入 NSTimer 中。

        顺便说一句,我很快将这段代码(带有动画)放入导航栏按钮项中,并且在表格加载完成后效果很好。

        【讨论】:

        • 即使在 viewDidLoad 中也可以滚动,但不会立即滚动。 NSTimer 在我看来是某种黑客行为。表加载事件是否有回调?
        • 正确,直到数据存在滚动到它才会滚动。在您拥有大量 tableview 数据或图像的项目中,可能需要 2 秒或更长时间,然后 viewDidLoad 已经被调用。不幸的是,当表格完成加载时,UITableViewDelegate 方法中没有任何内容。您可以在这里找到更多信息:stackoverflow.com/questions/1483581/…
        猜你喜欢
        • 1970-01-01
        • 2016-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多