隐藏iOS的最佳方法是什么

隐藏iOS的最佳方法是什么,ios,swift,uitableview,uirefreshcontrol,Ios,Swift,Uitableview,Uirefreshcontrol,当用户离开ViewController而refreshControl仍然可见时,我很难隐藏refreshControl。我尝试过设置它,从superView(tableView)中删除它,用新的替换它,等等。。。当用户返回屏幕时,问题仍然存在于tableView中,refreshControl之前的顶部内容插入仍然存在,并且它在tableView顶部留下了一个空白,如果我不替换/隐藏refreshControl,它将在此时可见 有什么建议吗 图像:当您呈现新屏幕时,只需在您的刷新控件上使用.en

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

有什么建议吗


图像:

当您呈现新屏幕时,只需在您的
刷新控件上使用
.endRefreshing()

当您呈现新屏幕时,只需在
刷新控件上使用
.endRefreshing()

试试这个:-

refreshControl.tintColor = .clear
试试这个:-

refreshControl.tintColor = .clear

初始化刷新控件:

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

        return refreshControl
    }()
self.tableView.addSubview(self.refreshControl)
处理刷新并结束刷新:

func handleRefresh(_ refreshControl: UIRefreshControl) {
        self.tableView.reloadData()
        refreshControl.endRefreshing()
    }
添加刷新控件:

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

        return refreshControl
    }()
self.tableView.addSubview(self.refreshControl)

初始化刷新控件:

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

        return refreshControl
    }()
self.tableView.addSubview(self.refreshControl)
处理刷新并结束刷新:

func handleRefresh(_ refreshControl: UIRefreshControl) {
        self.tableView.reloadData()
        refreshControl.endRefreshing()
    }
添加刷新控件:

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

        return refreshControl
    }()
self.tableView.addSubview(self.refreshControl)

我联系了一位朋友,他的回答非常好。这段代码帮助我顺利地移除refreshControl,以防它在屏幕上停留在冻结状态:

func forceHideRefreshControl(tableView: UITableView) {
    if tableView.contentOffset.y < 0 { // Move tableView to top
        tableView.setContentOffset(CGPoint.zero, animated: true)
    }
}
func forceHideRefreshControl(tableView:UITableView){
如果tableView.contentOffset.y<0{//,请将tableView移到顶部
tableView.setContentOffset(CGPoint.zero,动画:true)
}
}
虽然,若视图控制器还并没有完成加载,它将并没有可见的refreshControl。为此,您需要再次调用beginRefreshing(),但我会延迟执行,以避免任何动画问题。在任何情况下,我认为这是最好的解决方案,实际上删除了顶部的白色间距。我不知道endRefreshing()为什么不起作用,但至少我找到了另一种方法。希望这对任何人都有帮助!:)


注意:但是,此解决方案仅在卡滞/冻结刷新控件上测试。我不知道如果您没有此问题,但仍然使用此解决方案隐藏refreshControl会产生什么影响。

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

func forceHideRefreshControl(tableView: UITableView) {
    if tableView.contentOffset.y < 0 { // Move tableView to top
        tableView.setContentOffset(CGPoint.zero, animated: true)
    }
}
func forceHideRefreshControl(tableView:UITableView){
如果tableView.contentOffset.y<0{//,请将tableView移到顶部
tableView.setContentOffset(CGPoint.zero,动画:true)
}
}
虽然,若视图控制器还并没有完成加载,它将并没有可见的refreshControl。为此,您需要再次调用beginRefreshing(),但我会延迟执行,以避免任何动画问题。在任何情况下,我认为这是最好的解决方案,实际上删除了顶部的白色间距。我不知道endRefreshing()为什么不起作用,但至少我找到了另一种方法。希望这对任何人都有帮助!:)


注意:但是,此解决方案仅在卡滞/冻结刷新控件上测试。我不知道如果您没有这个问题,它会有什么影响,但仍然使用此解决方案来隐藏refreshControl。

当然,这是我尝试的第一件事。这没用,我相信这是iOS的问题。当用户离开viewController时,RefreshControl将丢失刷新状态。如果我在ViewDidDisplay中调用endRefreshing(),则不会发生任何事情,如果我选中refreshControl?.isRefreshing,则将始终返回false。(需要明确的是,只有在refreshControl仍处于活动/刷新状态时离开屏幕时才会发生这种情况)能否向我们展示一些代码,您在哪里调用endRefreshing,如何显示新屏幕以及如何关闭该屏幕?End refreshing:override func ViewDidDisplay(uu动画:Bool){super.ViewDidDisplay(动画)refreshControl?.endRefreshing()}显示的是整个其他区域。我将containerView用于ViewController,并将其用作页面。所以ViewController带着激活的刷新控件进入后台,带着停用的控件返回,但仍然可见。(TabViewController中的一个VCs是pager,所以它很大而且有点复杂)当然,这是我尝试的第一件事。这没用,我相信这是iOS的问题。当用户离开viewController时,RefreshControl将丢失刷新状态。如果我在ViewDidDisplay中调用endRefreshing(),则不会发生任何事情,如果我选中refreshControl?.isRefreshing,则将始终返回false。(需要明确的是,只有在refreshControl仍处于活动/刷新状态时离开屏幕时才会发生这种情况)能否向我们展示一些代码,您在哪里调用endRefreshing,如何显示新屏幕以及如何关闭该屏幕?End refreshing:override func ViewDidDisplay(uu动画:Bool){super.ViewDidDisplay(动画)refreshControl?.endRefreshing()}显示的是整个其他区域。我将containerView用于ViewController,并将其用作页面。所以ViewController带着激活的刷新控件进入后台,带着停用的控件返回,但仍然可见。(TabViewController中的一个VCs是pager,所以它很大,有点复杂)如果没有任何内容或任何
tableViewCell
,它将占用空间。是的,空白是主要问题。我的朋友得了一个毛病!:)它将如何修复?你能分享我的答案吗?我发布了我的答案:)但我还不能把它标记为答案!:(这些评论是离题的-如果没有任何内容或任何
tableViewCell
它将占用空间,这是默认设置。是的,空白是主要问题。我的朋友有一个解决办法!:)它将如何解决?你能分享我的答案吗?我发布了我的答案:)但我还不能把它标记为答案!:(这些评论离题了——这个答案对我很有用