使用' |'时,VLC的NSLayoutConstraint只能水平工作。

时间:2017-07-28 16:25:15

标签: ios user-interface swift3 nslayoutconstraint programmatically

我有一个UIView的实现。

struct LoginView {
let loginView: UIView = UIView()

func layoutLoginView() -> UIView {

    loginView.translatesAutoresizingMaskIntoConstraints = false
        loginView.backgroundColor = UIColor.purple

    return loginView
  } 
}

然后,我在viewcontroller中查看上面的内容如下..

class LoginVC: UIViewController {

private let instanceOfLoginView = LoginView()

override func loadView() {
    super.loadView()

    view.addSubview(instanceOfLoginView.layoutLoginView())

NSLayoutConstraint.activate(NSLayoutConstraint.constraints(withVisualFormat: "H:|-[loginView]-|", options: [], metrics: [:], views: ["loginView":instanceOfLoginView.layoutLoginView()]))

NSLayoutConstraint.activate(NSLayoutConstraint.constraints(withVisualFormat: "V:|-[loginView]-|", options: [], metrics: [:], views: ["loginView":instanceOfLoginView.layoutLoginView()]))

}

问题是只有NSLayout的'H'侧工作 - 检查下面的屏幕截图 - 。 'V'无效。

然而,当我应用以下"V:|-8-[loginView]-8-|"时,它可以工作!!!

你能告诉我为什么"V:|-[loginView]-|"只是工作,请......?

感谢您的帮助!

enter image description here

1 个答案:

答案 0 :(得分:1)

使用VFL时,-字符表示“使用标准间距”

在你的情况下:

    "H:|-[loginView]-|"
    "V:|-[loginView]-|"

你说“使用布局边距,默认情况下:

    UIEdgeInsets(top: 0.0, left: 16.0, bottom: 0.0, right: 16.0)

在iOS 11之前,视图控制器管理的根视图的.layoutMargins无法更改。要让您的紫色视图覆盖整个视图,请将您的VFL更改为:

    "H:|[loginView]|"
    "V:|[loginView]|"