视觉布局约束对应的代码是什么?
What is the code corresponding to the visual layout constraint?
视觉布局约束对应的代码是什么?我想把它翻译成 NSLayoutConstraint.activate([])
格式。
scrollView = UIScrollView()
scrollView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(scrollView)
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[scrollView]|", options: .AlignAllCenterX, metrics: nil, views: ["scrollView": scrollView]))
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[scrollView]|", options: .AlignAllCenterX, metrics: nil, views: ["scrollView": scrollView]))
stackView = UIStackView()
scrollView.addSubview(stackView)
scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[stackView]|", options: NSLayoutFormatOptions.AlignAllCenterX, metrics: nil, views: ["stackView": stackView]))
scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[stackView]", options: NSLayoutFormatOptions.AlignAllCenterX, metrics: nil, views: ["stackView": stackView]))
该片段来自 Simple Scrolling UIStackView。
可视化格式语言 (VFL) 可以同时创建多个约束,这些都可以。前三个 VFL 各创建 2 个约束,最后一个创建一个约束。
我建议使用布局锚点来创建约束。这是使用 NSLayoutConstraint.activate()
和布局锚点的等效代码:
scrollView = UIScrollView()
scrollView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(scrollView)
NSLayoutConstraint.activate([
scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
scrollView.topAnchor.constraint(equalTo: view.topAnchor),
scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
])
stackView = UIStackView()
scrollView.addSubview(stackView)
NSLayoutConstraint.activate([
stackView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),
stackView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor),
stackView.topAnchor.constraint(equalTo: scrollView.topAnchor)
])
备注:
- 我调查了
.alignAllCenterX
对结果约束的影响,在这种情况下该选项没有任何作用。
- 您可以将所有约束合并到一个
NSLayoutConstraint.activate()
调用中 如果 添加 both 子视图 before 创建约束。我认为两次调用更清楚,因为每组都有一个目的。
NSLayoutConstraint.activate()
很聪明,它将约束添加到适当的视图中。它是首选,自 iOS 8. 以来一直可用
- 确保设置
stackView.translatesAutoresizingMaskIntoConstraints = false
和 stackView.axis = .vertical
。 (您可能只是将这些问题排除在外,以使其更简洁)。
视觉布局约束对应的代码是什么?我想把它翻译成 NSLayoutConstraint.activate([])
格式。
scrollView = UIScrollView()
scrollView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(scrollView)
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[scrollView]|", options: .AlignAllCenterX, metrics: nil, views: ["scrollView": scrollView]))
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[scrollView]|", options: .AlignAllCenterX, metrics: nil, views: ["scrollView": scrollView]))
stackView = UIStackView()
scrollView.addSubview(stackView)
scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[stackView]|", options: NSLayoutFormatOptions.AlignAllCenterX, metrics: nil, views: ["stackView": stackView]))
scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[stackView]", options: NSLayoutFormatOptions.AlignAllCenterX, metrics: nil, views: ["stackView": stackView]))
该片段来自 Simple Scrolling UIStackView。
可视化格式语言 (VFL) 可以同时创建多个约束,这些都可以。前三个 VFL 各创建 2 个约束,最后一个创建一个约束。
我建议使用布局锚点来创建约束。这是使用 NSLayoutConstraint.activate()
和布局锚点的等效代码:
scrollView = UIScrollView()
scrollView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(scrollView)
NSLayoutConstraint.activate([
scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
scrollView.topAnchor.constraint(equalTo: view.topAnchor),
scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
])
stackView = UIStackView()
scrollView.addSubview(stackView)
NSLayoutConstraint.activate([
stackView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),
stackView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor),
stackView.topAnchor.constraint(equalTo: scrollView.topAnchor)
])
备注:
- 我调查了
.alignAllCenterX
对结果约束的影响,在这种情况下该选项没有任何作用。 - 您可以将所有约束合并到一个
NSLayoutConstraint.activate()
调用中 如果 添加 both 子视图 before 创建约束。我认为两次调用更清楚,因为每组都有一个目的。 NSLayoutConstraint.activate()
很聪明,它将约束添加到适当的视图中。它是首选,自 iOS 8. 以来一直可用
- 确保设置
stackView.translatesAutoresizingMaskIntoConstraints = false
和stackView.axis = .vertical
。 (您可能只是将这些问题排除在外,以使其更简洁)。