BackgroundViewを設定するUITableViewControllerがあります。このコントローラーにはUIRefreshControlがインストールされています。問題は、背景ビューを設定すると、更新コントロールが表示されないことです。背景ビューを削除すると、更新コントロールが表示されます。
私は何か間違ったことをしていますか?
この動作の理由は、iOS 7では、UITableView
のbackgroundView
がUIRefreshControl
の上に描画されるためです。これが設計によるものなのか問題なのかはわかりませんが、これを修正した回避策を次に示します。
self.tableView.backgroundView.layer.zPosition -= 1;
このコードは、UITableViewController refreshControl
プロパティを設定する場所に配置されます。
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)
背景を背面に送信するか、更新コントロールを前面に送信してみてください。更新コントロールは、インデックス0にある可能性が高いです。