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