隐藏 UIRefreshControl iOS 的最佳方法是什么

问题描述 投票:0回答:5

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

有什么建议吗?

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

ios swift uitableview uirefreshcontrol
5个回答
3
投票

试试这个:-

refreshControl.tintColor = .clear

1
投票

初始化刷新控件:

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)

0
投票

当您展示新屏幕时,只需在您的

.endRefreshing()
上使用
refreshControl


0
投票

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

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

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

注意: 但是,此解决方案仅在卡住/冻结的刷新控件上进行测试。我不知道如果你没有这个问题会产生什么效果,但仍然使用这个解决方案来隐藏refreshControl。


0
投票

我通过执行以下操作使其对我有用, 在 ViewdidLoad 上我做了

override func viewDidLoad() {
    refreshControl.tintColor = .clear
}

并且在调用我使用的选择器函数时

refreshControl.endRefreshing()
在调用我的自定义加载函数之前。

它没有为我显示加载指示器。

© www.soinside.com 2019 - 2024. All rights reserved.