问题
I have a UITableViewController on which I set a backgroundView. This controller has a UIRefreshControl installed. The problem is that when I set a background view, the refresh control is invisible. If I remove the background view, I can see the refresh control.
Am I doing something wrong?
回答1:
The reason for this behavior is that in iOS 7, the UITableView
's backgroundView
is drawn above the UIRefreshControl
. Not sure if this is by design or an issue, but here is a workaround that fixed it for me :
self.tableView.backgroundView.layer.zPosition -= 1;
This code goes where you set up your UITableViewController refreshControl
property.
回答2:
You could try sending the background to the back or the refresh control to the front. The refresh control is more than likely just sitting at index 0.
回答3:
It seems that UITableViewController pushes its UIRefreshControl to back to the 0 index during reload (behind its "backgroundView"), regardless at what index you put it in the first place. This is what worked for me (iOS 9): Disable refreshing in IB. Create UIRefreshControl in code and add it to tableView after setting up backgroundView:
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:
This issue is easily fixed by not using the self.refreshControl
property on the UITableViewController, instead create you own property for it and it will work just fine.
来源:https://stackoverflow.com/questions/18903076/uirefreshcontrol-and-uitableviews-backgroundview