iOS中的Pull to Refresh Jump

tco*_*cox 12 scrollview ios uirefreshcontrol

当我慢慢下拉刷新时,我看到UIActivityIndi​​cator圈在开始刷新之前慢慢变得更加完整.在圆圈完成并且刷新实际触发之前,内容跳跃/猛然下降然后圆圈开始旋转.我慢慢拉下来时才会注意到这一点.

我正在使用pull来刷新名为mainSV的滚动视图

    self.refresh = [[UIRefreshControl alloc] init];
    [self.refresh addTarget:self action:@selector(handleRefresh) forControlEvents:UIControlEventValueChanged];
    [self.mainSV addSubview:self.refresh];
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种跳跃/混蛋?

Aus*_*tin 8

这可能是iOS中的一个错误.你的设置是正确的,我在我的应用程序中看到了同样的事情.


and*_*der 5

我怀疑跳跃/混蛋是由于"双重"动作造成的.

refreshXcode 5发布后,实施方式发生了变化.

因此,不再需要如Apple文档中所述设置目标操作.

在使用Storyboard时,在Interface Builder/Storyboard文件中,选择故事板场景(表视图控制器).

在属性检查器中,在子视图表视图控制器下,选择"刷新"项,并将设置从"已禁用"更改为"已启用".

表视图控制器的属性检查器

删除或注释掉您在问题中包含的三行代码.(当需要时,即在Xcode 5之前,我将此代码放在我的viewDidLoadTVC生命周期方法中.)

如果没有自动插入到您的代码中,请将其添加为公共或私有IBAction...

- (IBAction)refresh:(UIRefreshControl *)sender;
Run Code Online (Sandbox Code Playgroud)

并将您的场景/表视图控制器连接到已发送事件 "值已更改".

出口连接的视觉表示

确保您的刷新操作已正确配置...

- (IBAction)refresh:(UIRefreshControl *)sender {
    [self.refreshControl beginRefreshing];

    //  Refresh code for your TVC

    [self.refreshControl endRefreshing];
}
Run Code Online (Sandbox Code Playgroud)

请注意,不需要设置任何属性refreshControl- 我怀疑当您在故事板中选择TVC属性中的设置Refreshing [Enabled]时,会自动合成此设置.

如果您需要在代码中调用刷新,请使用此行...

[self refresh:self.refreshControl];
Run Code Online (Sandbox Code Playgroud)

  • 如果我理解正确 - 这只适用于`UITableViewController`的子类?但不是在`UIViewController`里面的`UITableView`? (4认同)