LoginSignup
6
2

More than 3 years have passed since last update.

UITableViewの高さをcell数に応じて可変にしたい

Last updated at Posted at 2021-03-06

課題事例

  • 元々、画面全体がUIScrollViewになっていて、真ん中にUITableViewを差し込みたい(※新規画面なら全体をUITableViewにすれば済む話ではあります)。
  • 画面全体をスクロールさせる点に変わりはないので、UITableViewはスクロールさせない。
  • UITableViewはcell数が可変、かつcellごとの高さも違っていて、それに応じてUITableViewの高さを変えたい(そうしないと全てのcellが表示されなかったり、余白ができてしまったりするので)。

解決法

(1) 高さのconstraintを変数に格納。

private weak var tableViewHeightConstraint: NSLayoutConstraint?

(2) KVO(Key Value Observing)でUITableViewのcontentSize.heightを監視。

NSKeyValueObservationを格納するための変数を宣言し、UITableViewのcontentSize.heightをobserve。
heightが変わった時に上の制約のconstantをセットする処理を定義する。

private var observation: NSKeyValueObservation?

override func viewDidLoad() {
// 略
    observation = tableView.observe(\.contentSize, options: [.new]) { [weak self] (_, _) in
        guard let self = self else { return }
        self.tableViewHeightConstraint?.constant = self.tableView.contentSize.height
    }
}

(3) 後始末

deinit {
    observation?.invalidate()
    observation = nil
}

私は以上のような解決法で課題をクリアできましたが、もっとシンプルな解決法をご存知でしたら、ぜひ教えてください。:bow_tone1:

6
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2