0

ストーリーボードからビューを追加すると、コードを介して自動レイアウトの制約を処理できますが、コードを介して追加されたビューでこれを試みると、処理できません。

viewDidLoad() で以下のコードを呼び出していますが、機能しません。不足している部分は何ですか?

    var testView = UIView()
    testView.backgroundColor = UIColor.greenColor()
    self.view.addSubview(testView)

    let views : [String : AnyObject] = ["testView": testView]
    var allConstraints = [NSLayoutConstraint]()

    let verticalConstraint = NSLayoutConstraint.constraintsWithVisualFormat(
        "V:|-[testView(100)]",
        options: [],
        metrics: nil,
        views: views)
    allConstraints += verticalConstraint

    let horizontalConstraint = NSLayoutConstraint.constraintsWithVisualFormat(
        "H:|-[testView(200)]",
        options: [],
        metrics: nil,
        views: views)
    allConstraints += horizontalConstraint

    NSLayoutConstraint.activateConstraints(allConstraints)

ps:これらの行も試しましたが、役に立ちませんでした

    self.view.addConstraints(verticalConstraint)
    self.view.addConstraints(horizontalConstraint)
4

1 に答える 1

2

自動サイズ変更マスクの制約への変換をオフにする必要があります。デフォルトでは に設定されてtrueおり、これを忘れがちな場合は、意図しない制約が追加されます。

これを false に設定するには、

var myView = UIView()
myView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(myView)

translatesAutoresizingMaskIntoConstraints

このプロパティの値が YES の場合、システムは、ビューの自動サイズ変更マスクによって指定された動作を複製する一連の制約を作成します。デフォルトでは、プログラムで作成したビューのプロパティは YES に設定されています。Interface Builder でビューを追加すると、システムはこのプロパティを自動的に NO に設定します。

于 2015-12-31T09:42:28.663 に答える