当我返回查看控制器时,在tableview顶部刷新控制

jpl*_*ano 5 xcode ios uirefreshcontrol swift

出于某种原因,第一次加载视图控制器时,刷新控件的行为与预期一致(它在向下滑动时显示在tableview下).问题是当我点击另一个选项卡,然后返回到视图控制器时,刷新控件不再淡入,并且在tableview顶部可见.

当我回去查看控制器

这是代码的一部分:

class CoreTableViewController : UIViewController, UITableViewDataSource, UITableViewDelegate {

var tableView:UITableView!
var tableData:Array<AnyObject> = []
var dataFetched:Bool = false
var refreshControl:UIRefreshControl?

override func viewDidLoad() {
    super.viewDidLoad()

    self.edgesForExtendedLayout = UIRectEdge.None;

    self.tableView = self.assignTableView()
    self.tableView.delegate = self
    self.tableView.dataSource = self
    self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")
    self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None;

    if self.enableRefresher() {
        self.setRefreshControl()
    }
}

func enableRefresher() -> Bool {
    return true
}

func fetchData(cleanFirst:Bool = false) {
    // Fetch data.
}

func refresh() {
    self.fetchData(true)
    self.refreshControl!.endRefreshing()
}

func setRefreshControl() {
    self.refreshControl = UIRefreshControl()
    //self.refreshControl!.attributedTitle = NSAttributedString(string: "Actualizar")
    self.refreshControl!.addTarget(self, action: #selector(CoreTableViewController.refresh), forControlEvents: UIControlEvents.ValueChanged)
    self.tableView.addSubview(refreshControl!)
}

}
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

jpl*_*ano 10

我在这里找到了修复程序:https://stackoverflow.com/a/29088409/209200

self.tableView.addSubview(refreshControl!)应该是,而不是self.tableView.insertSubview(refreshControl!, atIndex: 0).

这导致refres控件出现在tableview上.


Vic*_*ohn 5

尝试将 z 索引设置为 -1,这意味着 UIRefreshControl 位于任何视图之后。

refreshControl.layer.zPosition = -1
Run Code Online (Sandbox Code Playgroud)

tableView.refreshControl?.beginRefreshing()
Run Code Online (Sandbox Code Playgroud)
self.tableView.refreshControl?.endRefreshing()
Run Code Online (Sandbox Code Playgroud)

两者必须成对使用。


Dim*_*lov 0

当我检查您的代码和问题时,我认为问题出在这里:

\n\n

“除了将刷新控件分配给表视图控制器\xe2\x80\x99srefreshControl属性之外,您还必须配置控件本身的目标和操作。”https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIRefreshControl_class/index.html#//apple_ref/occ/instm/UIRefreshControl/endRefreshing

\n\n

因此,从文档来看,您需要使用 UITableViewController,而不是 UIViewController。并设置它的refreshControl属性。

\n\n

在当前状态下,您只需将 UIRefreshControl 添加为常规子视图即可。

\n