今回は、UITableView
を画面回転時に再描画する方法についてです。
そこまで複雑なことはしていないのですが、画面回転を検知する書き方がちょっと面倒だったので、備忘録としてまとめ。
参考にさせていただいた記事はこちらから。
【swift】iosで画面の回転を検知してUITableViewを再描画する – とりあえずphpとか
http://kimagureneet.hatenablog.com/entry/2017/01/09/123659
サンプルコードは下記の通りです。
override func viewDidAppear(_ animated: Bool) { // 画面回転を検知 NotificationCenter.default.addObserver(self, selector:#selector(didChangeOrientation(_:)), name: UIDevice.orientationDidChangeNotification, object: nil) } @objc private func didChangeOrientation(_ notification: Notification) { //画面回転時の処理 tableView.frame.size = CGSize(width: view.frame.width, height: view.frame.height) tableView.setNeedsDisplay() tableView.reloadData() }
まず、viewDidAppear
内に画面が回転したことを検知する処理を追加します。
画面が回転すると、4行目で指定した関数が実行されるので、9行目からの関数 didChangeOrientation
内で、画面回転した時に行いたい処理を記載します。
今回は UITableView
を使用しているので、TableView のサイズを再定義し、データを再表示しています。
処理としては以上です。
なお、12行目の setNeedsDisplay
は UIView
に「再描画が必要」というフラグを設定する処理とのことです。
ですが、実際に再描画の処理を行うことはせず、別の処理、今回で言うと reloadData
を行う必要があるとのこと。
……いまいちよくわからないのですが、必要みたいなので追加しております。
以上、端末の画面が回転した際に UITableView
を再描画する方法でした。
ご参考になれば幸いです。