今回は、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 を再描画する方法でした。
ご参考になれば幸いです。