iOS中的Pull to Refresh Jump

时间:2014-05-20 21:06:08

标签: ios scrollview uirefreshcontrol

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

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

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

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

4 个答案:

答案 0 :(得分:8)

这可能是iOS中的一个错误。您的设置是正确的,我在我的应用程序中看到了相同的内容。

答案 1 :(得分:5)

我怀疑跳跃/混蛋是由于“双重”动作造成的。

Xcode 5发布后,refresh实施发生了变化。

因此,不再需要按Apple Documentation中所述设置目标操作。

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

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

Attribute Inspector for Table View Controller

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

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

- (IBAction)refresh:(UIRefreshControl *)sender;

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

Visual representation of outlet connection

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

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

    //  Refresh code for your TVC

    [self.refreshControl endRefreshing];
}

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

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

[self refresh:self.refreshControl];

答案 2 :(得分:1)

我需要查看其余代码(或至少是滚动+刷新方法)来诊断问题。

这是我们在objective-c和swift中实现自定义pull to refresh控件的教程。如果您遵循本教程,您不应该看到任何跳跃或抽搐。

http://www.jackrabbitmobile.com/design/ios-custom-pull-to-refresh-control/

希望它有所帮助!

答案 3 :(得分:0)

古老的问题,但是如果有人仍然存在此问题并且您正在使用NavigationController,只需将NavigationBar设置为“半透明”即可。

enter image description here

使用非半透明NavigationBar会导致UIControlEventValueChanged由于某种原因被触发时,表视图略微跳转。

XCode 10.1