LoginSignup
6
8

More than 5 years have passed since last update.

[Xcode8以降] scrollViewやViewにxibで作ったカスタムViewをaddSubViewするとオートレイアウトが効かなくなる件

Last updated at Posted at 2016-10-21

まずはじめに

XCode8対応 Swift3対応皆さん順調ですか?
今回対応にあたりハマったのでメモ程度に書いていこうと思います。

この度業務でXcode8対応のためコンバート・移行作業を行いました。
自分はよくScrollViewにオートレイアウトされたxibを置いて表示するような実装をよく行います。
今回問題の箇所はscrollViewにxibをaddSubViewするとオートレイアウトが効かなくなる
ということで

早速始めていきましょう

ViewControllerにScrollViewをオートレイアウトで画面いっぱいに敷き詰めます。

9ea38ad23c7c2f04f331882182728d93.png
 
 
次にxibを配置するコードを簡単に書いていきます。
呼び出したいViewControllerに以下のコードを。

ViewController
class ViewController: UIViewController {
    @IBOutlet weak var scrollView: UIScrollView!
    override func viewDidLoad() {
        super.viewDidLoad()
        let addView = UINib(nibName: "View", bundle: nil).instantiate(withOwner: self, options: nil)[0] as! UIView
        addView.frame = self.view.bounds
        scrollView.contentSize = CGSize(width: self.view.frame.width, height: self.view.frame.height)
        scrollView.addSubview(addView)
    }
}

 

まず単純にオートレイアウトをかけずにViewControllerから呼び出して配置してみます。
シュミレーターでプレビューをしてみるとこんな感じ。オートレイアウトはかかっていませんが問題なく表示されています!

4de7506de935346dd13c83f6334d23d3.png

  

 

今度はグレイのViewに200px x 200px の制約をつけ右寄せしてオートレイアウトしてみましょう.....

605c6efceb8fef427d87245ac6a13535.png

なんとシミュレーターで確認しても何も表示されない。
オートレイアウトのErrorもたくさん出現....

ここからちょっとした設定を行います

まず呼び出したいxibを開きViewを選択肢ます。
右側のメニュー内Simulated MetricsのSizeをFreeformに変更します。

31b22c5e028a00a03b15fee551093158.png

 
 
 
そしてAutoResizeingを図のように設定します。

a86183e1e8af52ca7e16c1f45a1bc1ff.png

 
 

するとめでたく期待通りの制約がついた正しい表示になりました

2ec70b8db82a09f6b47a87b76f353685.png

6
8
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
6
8