環境
- Xcode10.1
- Swift4.2
余談
Swiftでコード書いてるとUIViewControllerのviewに画面いっぱいのUIViewサブクラスをaddSubviewしたり
UIViewのコンテナにxibから生成したインスタンスをコードからaddSubviewしたりすることがあるかと思います。
でも、addSubviewしただけでは親Viewに対してオートレイアウトが適応されていないのでレイアウト崩れすることがあります。
※UIViewControllerを想定して書いてるのでself.viewでもok
※hogeViewはUIViewのサブクラス
view.addSubview(hogeView)
addSubViewしたあとに親Viewの上下左右にオートレイアウトをはる
以下のようなUIViewのExtensionを作成すればVCに大量のオートレイアウトコードを書かなくて良いと思います
extension UIView {
/// addSubViewした親Viewと同じ大きさにオートレイアウトを作成
///
/// - Parameter equalTo: addSubViewした親View
func anchorAll(equalTo: UIView) {
// AutoresizingMaskからAutoLayoutへの自動変換を無効化
translatesAutoresizingMaskIntoConstraints = false
// 対象のViewの四辺にアンカーを貼る
topAnchor.constraint(equalTo: equalTo.topAnchor, constant: 0).isActive = true
leftAnchor.constraint(equalTo: equalTo.leftAnchor, constant: 0).isActive = true
bottomAnchor.constraint(equalTo: equalTo.bottomAnchor, constant: 0).isActive = true
rightAnchor.constraint(equalTo: equalTo.rightAnchor, constant: 0).isActive = true
}
}
使い方
view.addSubview(hogeView)
// viewの上下左右に合わせてオートレイアウトをはる
hogeView.anchorAll(view)
UIViewのaddSubViewメソッドごとラップしてしまってオートレイアウトを貼ってくれるaddSubView機能をextensionで書いてもいいかもしれないですね。
おしまい