メモ

技術的な備忘録を書きます

SwiftのView関係ではまったことメモ

ボタンが押せない

ボタンが反応しない(addTargetした処理に飛ばない)ときは親のViewからはみ出た場所にボタンを配置しているか他のViewが上から被さっているかの場合が多い。
Viewに色をつけて透過しないようにして見えるようにすればすぐにわかるはず。
上記で問題ないならViewのUser Interaction Enabledがfalseになっている可能性がある。

Viewのサイズが正しく取得できない

viewDidLoad() の時点ではconstraintsにによるViewの計算が行われていないため正しい値が取れない。
viewDidLayoutSubviews() で行えば問題なく正しい値が取得できる。

override func viewDidLoad() {
  super.viewDidLoad()
  // ここだと計算前の値に
}

override func viewDidLayoutSubviews() {
  super.viewDidLayoutSubviews()
  // ここならok
}

他のViewから戻った時に画面が更新前のまま

viewDidLoadなどに処理が書かれており、前の画面に戻った際に処理が呼ばれないのが原因の可能性が高い。
viewWillAppearに処理を書けば更新される。

swiftのライフサイクルについては下記の記事が参考になった qiita.com

公式のドキュメントはこちら UIViewController - UIKit | Apple Developer Documentation