【问题标题】:What is the best way to hide UIRefreshControl iOS隐藏 UIRefreshControl iOS 的最佳方法是什么
【发布时间】:2017-08-31 13:28:33
【问题描述】:

一旦用户离开 ViewController 而 refreshControl 仍然可见,我无法隐藏 refreshControl。我已尝试将其设置为从 superView(tableView)中删除它,将其替换为新的,等等...当用户返回屏幕时 tableView 仍然存在问题,顶部内容插入之前仍来自 refreshControl 并且它留下了一个空白tableView 的顶部,如果我不替换/隐藏 refreshControl,它将在此时可见。

有什么建议吗?

图片:Transition between screens, refreshControl does not hide on viewDidDisappear

【问题讨论】:

    标签: ios swift uitableview uirefreshcontrol


    【解决方案1】:

    试试这个:-

    refreshControl.tintColor = .clear
    

    【讨论】:

    • 如果没有任何内容或没有任何tableViewCell,它将占用空间。这是默认设置。
    • 是的,空白是主要问题。我的朋友有一个修复! :)
    • 它将如何解决?可以分享一下答案吗?
    • 我发布了我的答案 :) 但我还不能将其标记为答案! :(
    • 这些 cmets 离题了 - 这个答案对我来说效果很好
    【解决方案2】:

    初始化刷新控件:

    lazy var refreshControl: UIRefreshControl = {
            let refreshControl = UIRefreshControl()
            refreshControl.addTarget(self, action: 
                         #selector(ViewController.handleRefresh(_:)), 
                         for: UIControlEvents.valueChanged)
            refreshControl.tintColor = UIColor.red
    
            return refreshControl
        }()
    

    处理刷新并结束刷新:

    func handleRefresh(_ refreshControl: UIRefreshControl) {
            self.tableView.reloadData()
            refreshControl.endRefreshing()
        }
    

    添加刷新控件:

    self.tableView.addSubview(self.refreshControl)
    

    【讨论】:

      【解决方案3】:

      当您展示新屏幕时,只需在您的refreshControl 上使用.endRefreshing()

      【讨论】:

      • 当然,这是我尝试的第一件事。这没有任何作用,我认为这是 iOS 问题。当用户离开 viewController 时,RefreshControl 会失去刷新状态。如果我在 viewDidAppear 中调用 endRefreshing() 没有任何反应,并且如果我检查 refreshControl?.isRefreshing,总是会返回 false。 (需要明确的是,只有当您在 refreshControl 仍处于活动状态/处于刷新状态时离开屏幕时才会发生这种情况)
      • 你能给我们看一些代码吗,你在哪里调用 endRefreshing,你如何呈现新屏幕以及如何关闭该屏幕?
      • 结束刷新:覆盖 func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) refreshControl?.endRefreshing() }
      • 呈现是整个其他领域。我将 containerView 用于 viewController 并将它们用作页面。因此 ViewController 进入后台,并带有活动的刷新控件,并以停用的控件返回,但仍然可见。 (TabViewController 中的 VC 之一是 pager,所以它很大而且有点复杂)
      【解决方案4】:

      我联系了一位朋友,他给出了非常好的答案。这是帮助我顺利删除 refreshControl 的代码,以防它卡在屏幕上的冻结状态:

      func forceHideRefreshControl(tableView: UITableView) {
          if tableView.contentOffset.y < 0 { // Move tableView to top
              tableView.setContentOffset(CGPoint.zero, animated: true)
          }
      }
      

      虽然如果视图控制器还没有完成加载,它不会有 refreshControl 可见。为此,您需要再次调用 beginRefreshing() ,但我会延迟这样做以避免任何动画问题。无论如何,我认为这是实际上消除顶部白色间距的最佳解决方案。我不知道为什么 endRefreshing() 不起作用,但至少我找到了另一种方法。希望这对任何人都有帮助! :)

      注意:但是,此解决方案仅在卡住/冻结 refreshControl 上进行测试。不知道如果你没有这个问题会有什么影响,但是还是用这个方案来隐藏refreshControl。

      【讨论】:

        猜你喜欢
        • 2011-07-16
        • 1970-01-01
        • 1970-01-01
        • 2015-05-10
        • 2015-08-05
        • 2010-12-24
        • 1970-01-01
        • 1970-01-01
        • 2010-10-24
        相关资源
        最近更新 更多