2016-07-03 4 views
0

私は自動レイアウトを使用してストーリーボードで自分のビューを設計しましたが、VFLでプログラムで実装するには問題があります。 このビューは3つのサブビューは、いくつかのために、レイアウト縦にあります enter image description hereiOS自動レイアウトはVFLを使用してプログラムで実装されています

肖像画で、このようになりますし、いくつかの方法では、我々は[2,3,1の順序を(つまり、[1,2,3]に変更することができます])。 view1、view2、view3はすべて固定幅= 100、高さ= 100、view2の中心はスーパービューの中心に等しくなります。 彼らは肖像画にあったようにランドスケープモードへの変更は、3つのサブビューはこのように、同じ順序で水平にレイアウト: enter image description here

ホープ誰かが私はこれを実装するのに役立つ可能性があり、任意の助けに感謝を!そして、ここで私の問題を明確に記述しなかった場合に、私のサンプルプロジェクトをダウンロードできます!これが解決策になる可能性がちょうどVFLとあなたがすべての必要 https://github.com/SomnusLee1988/SamplePorject

+0

あなたはUIStackViewをしようとしたことがあります。https:?//developer.apple.com/library/ios/documentation/UIKit/Reference/UIStackView_Class_Reference/ –

+0

af88 vflで同じ中心の制約(必要な制約の1つ)を設定することはできません。 –

答えて

1

セットアップではないあなたができるので、制約:

var view1: UIView! 
var view2: UIView! 
var view3: UIView! 

var variableConstraints = [NSLayoutConstraint]() 

let metrics = ["width": 100, "height": 100] 
var views: [String: AnyObject]! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    view1 = UIView() 
    view1.backgroundColor = UIColor.redColor() 
    view1.translatesAutoresizingMaskIntoConstraints = false 
    view.addSubview(view1) 

    view2 = UIView() 
    view2.backgroundColor = UIColor.blueColor() 
    view2.translatesAutoresizingMaskIntoConstraints = false 
    view.addSubview(view2) 

    view3 = UIView() 
    view3.backgroundColor = UIColor.greenColor() 
    view3.translatesAutoresizingMaskIntoConstraints = false 
    view.addSubview(view3) 

    views = ["v1": view1, "v2": view2, "v3": view3] 

    setupFixedConstraints() 
    setupVariableConstraintsForSize(nil) 
} 

private func setupFixedConstraints() { 
    // width and height 
    NSLayoutConstraint.activateConstraints(NSLayoutConstraint.constraintsWithVisualFormat("[v2(width)]", options: [], metrics: metrics, views: views)) 
    NSLayoutConstraint.activateConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[v2(height)]", options: [], metrics: metrics, views: views)) 

    // center x and center y 
    NSLayoutConstraint(item: view2, attribute: .CenterX, relatedBy: .Equal, toItem: view, attribute: .CenterX, multiplier: 1, constant: 0).active = true 
    NSLayoutConstraint(item: view2, attribute: .CenterY, relatedBy: .Equal, toItem: view, attribute: .CenterY, multiplier: 1, constant: 0).active = true 
} 

private func setupVariableConstraintsForSize(size: CGSize?) { 
    // remove existing constraints 
    NSLayoutConstraint.deactivateConstraints(variableConstraints) 
    variableConstraints.removeAll() 

    let size = size ?? view.frame.size 

    if size.width > size.height { 
     // landscape 
     variableConstraints += NSLayoutConstraint.constraintsWithVisualFormat("[v1(==v2)][v2][v3(==v2)]", options: [.AlignAllTop, .AlignAllBottom], metrics: metrics, views: views) 
    } else { 
     // portrait 
     variableConstraints += NSLayoutConstraint.constraintsWithVisualFormat("V:[v1(==v2)][v2][v3(==v2)]", options: [.AlignAllLeading, .AlignAllTrailing], metrics: metrics, views: views) 
    } 

    // activate constraints 
    NSLayoutConstraint.activateConstraints(variableConstraints) 
} 

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { 
    setupVariableConstraintsForSize(size) 
    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator) 
} 
+0

素晴らしい〜それは働く – SomnusLee

+0

私は助けることができる嬉しい:) –

+0

@Slotla、私はもう一つ質問がある。 VFLで中心をスーパービューの中心の制約に合わせるように設定できないのはなぜですか?ドキュメントからの – SomnusLee

関連する問題