带有 VFL 的 NSLayoutConstraint 仅在使用 '|' 时水平工作
Posted
技术标签:
【中文标题】带有 VFL 的 NSLayoutConstraint 仅在使用 \'|\' 时水平工作【英文标题】:NSLayoutConstraint with VFL is working only horizontally when using '|'带有 VFL 的 NSLayoutConstraint 仅在使用 '|' 时水平工作 【发布时间】:2017-07-28 16:25:15 【问题描述】:我有以下 UIView 的实现..
struct LoginView
let loginView: UIView = UIView()
func layoutLoginView() -> UIView
loginView.translatesAutoresizingMaskIntoConstraints = false
loginView.backgroundColor = UIColor.purple
return loginView
然后,我在 viewcontroller 中 subview 如下..
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]-|"
不能正常工作吗?
感谢您的帮助!
【问题讨论】:
【参考方案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]|"
【讨论】:
感谢您的努力。真的很有帮助。感谢您指导像我这样的新手。快速提问,在 iOS 11 之前说,这是否意味着当 11 出来时这种情况正在改变..? 是的 - 请参阅 Apple 的文档,或:useyourloaf.com/blog/changing-root-view-layout-margins以上是关于带有 VFL 的 NSLayoutConstraint 仅在使用 '|' 时水平工作的主要内容,如果未能解决你的问题,请参考以下文章