メモ

プログラミングなどの備忘録を書きます

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

SwiftのView関係で引っかかったことの雑多なメモです

ボタンが押せない

ボタンが反応しない(addTargetした処理に飛ばない)ときは親のViewからはみ出た場所にボタンが配置されているか、他のViewが上から被さっているかの場合が多い。
Viewに色をつけて可視化すれば分かりやすい。
可視化しても問題なさそうならViewのisUserInteractionEnabledがfalseになっている可能性がある。

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

viewDidLoad() の時点ではconstraintsによるViewの配置が行われていないため正しい値が取れない。
viewDidLayoutSubviews() で行えばconstraintsが適用された後の値が取得できる。

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

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

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

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

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

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

cornerRadiusが効かない

デフォルトでは子のViewが親Viewを突き破って表示されるため、親ViewのconerRaiusが聞いて いないように見えたのが原因だった。
下記を親viewに設定すれば子が親Viewからはみ出さないようになる。
ただし、masksToBounds = true を設定すると影が出なくなってしまうので注意

parentView.layer.cornerRadius = 5
parentView.layer.masksToBounds = true