2017-07-30 4 views
0

スクロールビュー(スナップチャットスタイル)内に3つのビューコントローラを追加したいと思います。次のコードはうまくいくようですが、アプリケーションを終了して(ホーム画面に戻って)戻ってくると、奇妙な理由でビューがサイズ変更されます。私はalignAllTopとalignAllBottomを追加しようとしましたが、成功しませんでした。なぜこのようなことが起きているのでしょうか?スクロールビュー内に3つのビューコントローラを埋め込む

let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main) 

    self.mainScrollView.delaysContentTouches = false 

    let v1 = storyboard.instantiateViewController(withIdentifier: "profileViewController") as! profileViewController 

    self.addChildViewController(v1) 
    self.mainScrollView.addSubview(v1.view) 
    v1.didMove(toParentViewController: self) 

    //-------- 

    let v2 : recordViewController = recordViewController(nibName: "recordViewController", bundle: nil) 

    self.addChildViewController(v2) 
    self.mainScrollView.addSubview(v2.view) 
    v2.didMove(toParentViewController: self) 

    //-------- 

    let v3 = storyboard.instantiateViewController(withIdentifier: "discoverViewController") as! discoverViewController 

    self.addChildViewController(v3) 
    self.mainScrollView.addSubview(v3.view) 
    v3.didMove(toParentViewController: self) 


    //-------- 
    var v1frame : CGRect = self.mainScrollView.bounds 
    v1frame.origin.x = 0 
    v1.view.frame = v1frame 

    var v2frame : CGRect = self.mainScrollView.bounds 
    v2frame.origin.x = self.view.frame.width 
    v2.view.frame = v2frame 

    var v3frame : CGRect = self.mainScrollView.bounds 
    v3frame.origin.x = self.view.frame.width*2 
    v3.view.frame = v3frame 

    //v1.view.translatesAutoresizingMaskIntoConstraints = false 

    let csH1 = NSLayoutConstraint.constraints(withVisualFormat: "|-[v]-|", options: [.alignAllTop], metrics: [:], views: ["v": v1.view]) 
    let csH2 = NSLayoutConstraint.constraints(withVisualFormat: "|-[v]-|", options: [.alignAllTop], metrics: [:], views: ["v": v2.view]) 
    let csH3 = NSLayoutConstraint.constraints(withVisualFormat: "|-[v]-|", options: [.alignAllTop], metrics: [:], views: ["v": v3.view]) 

    let csB1 = NSLayoutConstraint.constraints(withVisualFormat: "|-[v]-|", options: [.alignAllBottom], metrics: [:], views: ["v": v1.view]) 
    let csB2 = NSLayoutConstraint.constraints(withVisualFormat: "|-[v]-|", options: [.alignAllBottom], metrics: [:], views: ["v": v2.view]) 
    let csB3 = NSLayoutConstraint.constraints(withVisualFormat: "|-[v]-|", options: [.alignAllBottom], metrics: [:], views: ["v": v3.view]) 

    self.mainScrollView.addConstraints(csH1) 
    self.mainScrollView.addConstraints(csH2) 
    self.mainScrollView.addConstraints(csH3) 

    self.mainScrollView.addConstraints(csB1) 
    self.mainScrollView.addConstraints(csB2) 
    self.mainScrollView.addConstraints(csB3) 



    //UI 
    self.mainScrollView.contentSize = CGSize(width: self.view.frame.width * 3, height: self.view.frame.size.height) 
    self.mainScrollView.setContentOffset(CGPoint(x: self.view.frame.width, y: 0), animated: false) 
+0

視覚的なデバッガを試すことをお勧めします。 (1)Xcodeのエディタの下にあるこのボタンをクリック - 実行中のアプリケーションのビジュアルデバッグを有効にします (2)紫色の矩形があるかどうかを確認してください(ここでは、http://imgur.com/a/Z9sYK) Xcodeのトップステータスバー(それがそうであるかどうかはわかりません)に数字が表示されます。それがある場合は、自動レイアウトの問題があることを意味します。 –

+0

@DaniyarKarbayevエラーはありません。それがあっても、なぜ私はアプリを再び開くときに起こるのでしょうか? –

答えて

0

私は1つscrollView固定すべての制約を追加ビューコントローラ内部のストーリーボードに推薦する(先頭、末尾、上、下)、その後、scrollView内のサブビューを追加します。 scrollView(先行、後続、上、下、等しい幅(等しいかそれより大きい)、等しい高さ(等しいかより大きい必要があります)のサブビュー制約を固定しました。

水平あなたが水平に、その後も固定幅の制約をスクロールしたい場合、これは、自動レイアウトエラーを回避するために必要なく、内部のプレースホルダは、ビルド時に削除をチェックされ をスクロールします。垂直スクロール については

を使用すると、縦方向に、その後も、ピンの高さの制約をスクロールしたい場合これは、自動レイアウトエラー を避けるために必要ですが、内部のプレースホルダはビルド時に削除にチェックされます。

注: - 両方またはいずれかを使用できます。

その後、サブビュー内に3つのサブビューを追加し、それに応じて制約を固定します。

最後に、3つのサブビューに3つのView Controllerを読み込みます。

このアプローチでは、多くのコードを処理する必要はありません。

0

あなたは4つの水平方向の制約を追加する必要がありますことを意味しているUIScrollViewののコンテンツにあなたのサブビューを制約する必要があります:エッジを残しているはず

  1. 左端ビューは
  2. 2番目のビューをスーパーに等しく、エッジを残している必要があります第1のビューの右端および第3のビューの左端に等しい右端に等しい。
  3. 右端(3番目)のビューの右端はスーパービューに等しい必要があります。
+0

が試行され、動作しません。そうすることで何らかの理由でスクロールビューのスクロールが無効になります –

関連する問題