【问题标题】:Pull To Refresh Jump in iOSiOS 中拉动刷新跳转
【发布时间】:2014-07-09 07:34:00
【问题描述】:

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

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

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

为什么会发生这种跳跃/颠簸?

【问题讨论】:

  • 您在使用情节提要吗?你的目标 iOS 是什么?
  • 我有一个主线故事板。滚动视图位于 xib 中。我刚刚注意到这在 iOS 6 中不是问题,它只会在 iOS 7 中跳转。
  • refresh 在 iOS 6 和 7 之间更改。我会提供答案...
  • 实际上是我的错误,refresh 实现在 Xcode 4.5.2 和 Xcode 5+ 之间发生了变化

标签: ios scrollview uirefreshcontrol


【解决方案1】:

这可能是 iOS 中的一个错误。你的设置是正确的,我在我的应用中看到了同样的东西。

【讨论】:

    【解决方案2】:

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

    在 Xcode 5 发布后,refresh 的实现发生了变化。

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

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

    在属性检查器中,在子标​​题Table View Controller下,选择“Refreshing”项并将设置从“Disabled”更改为“Enabled”。

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

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

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

    并将您的场景/表格视图控制器连接到 Sent Event “Value Changed”。

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

    - (IBAction)refresh:(UIRefreshControl *)sender {
        [self.refreshControl beginRefreshing];
    
        //  Refresh code for your TVC
    
        [self.refreshControl endRefreshing];
    }
    

    请注意,refreshControl 不需要设置任何属性 - 我怀疑当您在情节提要的 TVC 属性中选择设置 Refreshing [Enabled] 时,会有一个触发器自动合成此属性。

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

    [self refresh:self.refreshControl];
    

    【讨论】:

    • 如果我理解正确 - 这仅适用于 UITableViewController 的子类?但不适用于UITableView 内的UIViewController
    • 以这种方式实现时,我仍然会感到跳跃/混蛋:(
    • @oyatek per Apple docs 你是对的,刷新控件专门设计用于由表视图控制器管理的表视图。不确定问题中提到的第二个选项在哪里?
    • @lostintranslation 您可能需要在您的问题中添加更多代码...例如解释触发刷新时正在运行的代码?
    • 还有一个问题...当你正常下拉时行为是否会重复?
    【解决方案3】:

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

    这是我们在 Objective-C 和 Swift 中实现自定义拉取刷新控件的教程。如果您按照本教程进行操作,您应该不会看到任何跳跃或抽搐。

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

    希望对你有帮助!

    【讨论】:

      【解决方案4】:

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

      由于某种原因触发 UIControlEventValueChanged 时,使用非半透明 NavigationBar 会导致 tableview 轻微跳跃。

      XCode 10.1

      【讨论】:

        猜你喜欢
        • 2011-07-05
        • 1970-01-01
        • 2015-10-19
        • 2020-05-20
        • 1970-01-01
        • 1970-01-01
        • 2014-03-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多