浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

【Swift】端末の回転を検知してUITableViewを再描画する方法

今回は、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行目の setNeedsDisplayUIView に「再描画が必要」というフラグを設定する処理とのことです。
ですが、実際に再描画の処理を行うことはせず、別の処理、今回で言うと reloadData を行う必要があるとのこと。
……いまいちよくわからないのですが、必要みたいなので追加しております。

 

以上、端末の画面が回転した際に UITableView を再描画する方法でした。
ご参考になれば幸いです。

  • この記事いいね! (0)