5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UIViewをaddSubViewしたあとにオートレイアウトをはる

Posted at

環境

  • 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で書いてもいいかもしれないですね。

おしまい

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?