带有 VFL 的 NSLayoutConstraint 在使用“|”时只能水平工作

NSLayoutConstraint with VFL is working only horizontally when using '|'

我有以下 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]-|" 不能正常工作吗?

感谢您的帮助!

当使用 VFL 时,- 字符表示 "use the standard spacing"

你的情况:

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

你说的是 "use the layout margins",默认情况下是:

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

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

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