web-dev-qa-db-ja.com

UIRefreshControlとUITableViewのbackgroundVIew

BackgroundViewを設定するUITableViewControllerがあります。このコントローラーにはUIRefreshControlがインストールされています。問題は、背景ビューを設定すると、更新コントロールが表示されないことです。背景ビューを削除すると、更新コントロールが表示されます。

私は何か間違ったことをしていますか?

29
leftspin

この動作の理由は、iOS 7では、UITableViewbackgroundViewUIRefreshControlの上に描画されるためです。これが設計によるものなのか問題なのかはわかりませんが、これを修正した回避策を次に示します。

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

このコードは、UITableViewController refreshControlプロパティを設定する場所に配置されます。

87
Champoul

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
Jovan Stankovic

背景を背面に送信するか、更新コントロールを前面に送信してみてください。更新コントロールは、インデックス0にある可能性が高いです。

0
Mark McCorkle