ios 使用“”时,具有VFL的NSLayoutConstraint仅水平工作|”

aelbi1ox  于 2023-05-19  发布在  iOS
关注(0)|答案(1)|浏览(140)

我有一个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]-|"不能简单地工作吗?
感谢你的帮助!

q0qdq0h2

q0qdq0h21#

使用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]|"

相关问题