【问题标题】:UIRefreshControl and UITableView's backgroundVIewUIRefreshControl 和 UITableView 的 backgroundVIew
【发布时间】:2013-09-25 00:48:15
【问题描述】:

我有一个 UITableViewController,我在其上设置了一个 backgroundView。此控制器安装了 UIRefreshControl。问题是当我设置背景视图时,刷新控件是不可见的。如果我删除背景视图,我可以看到刷新控件。

我做错了吗?

【问题讨论】:

  • 如果您对以下任何答案表示赞赏,请将其中一个标记为正确答案。这将提高您的声誉,以及答案作曲家的声誉。

标签: ios uirefreshcontrol


【解决方案1】:

这种行为的原因是在 iOS 7 中,UITableViewbackgroundView 被绘制在UIRefreshControl 上方。不确定这是设计使然还是问题,但这是为我修复它的解决方法:

   self.tableView.backgroundView.layer.zPosition -= 1;

此代码位于您设置 UITableViewController refreshControl 属性的位置。

【讨论】:

  • 这行得通。这是另一种语义上更清晰的方式:self.refreshControl.layer.zPosition = self.tableView.backgroundView.layer.zPosition + 1;
  • 给这家伙一杯啤酒!谢谢你! :)
  • 这太丑了,但它把我从痛苦中解救了出来。谢谢尚普尔!
  • 如果您有搜索栏,这不是一个好的解决方案,因为它会导致刷新控件出现在搜索栏上方。
【解决方案2】:

您可以尝试将背景发送到后面或将刷新控件发送到前面。刷新控件很可能只是位于索引 0。

【讨论】:

    【解决方案3】:

    似乎 UITableViewController 在重新加载期间将其 UIRefreshControl 推回 0 索引(在其“backgroundView”之后),无论您首先将它放在哪个索引。这对我有用(iOS 9):在 IB 中禁用刷新。在代码中创建UIRefreshControl,设置好backgroundView后添加到tableView中:

        let someView = UIView()
    
        self.tableView.backgroundView = someView
    
        let refreshControl = UIRefreshControl()
    
        refreshControl.addTarget(self, action: #selector(MyTableViewController.refresh(_:)), forControlEvents: .ValueChanged)
    
        self.tableView.insertSubview(refreshControl, atIndex: 1)
    

    【讨论】:

      【解决方案4】:

      通过不使用 UITableViewController 上的 self.refreshControl 属性,可以轻松解决此问题,而是为它创建自己的属性,它会正常工作。

      【讨论】:

        猜你喜欢
        • 2012-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-03
        • 2015-07-30
        • 1970-01-01
        • 1970-01-01
        • 2016-01-09
        相关资源
        最近更新 更多