在 Swift 中向 NSLayoutAnchor 约束添加乘数
Add multiplier to NSLayoutAnchor constraints in Swift
锚约束简化了添加约束,但故事板中可用的乘数 属性 似乎不适用于所有类型的约束。
例如,作为 ,您可以在视图中将标签居中:
view.addSubview(loadingLabel)
loadingLabel.translatesAutoresizingMaskIntoConstraints = false
loadingLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
loadingLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
但是,显然,当您 可以 设置长度限制的乘数时:
someView.heightAnchor.constraint(equalTo: heightAnchor, multiplier: 0.4)
您不能将类似的参数添加到 CenterX 或 CenterY 参数,可能是因为 Apple 认为这对某个点没有意义,尽管您可以在情节提要中这样做 discussed in this question.
将乘数添加到使点居中以使该点与顶部屏幕大小成比例的最佳方法是什么?
您不能为 X 和 Y 轴约束的锚点方法添加乘数,它们仅适用于维度锚点。但是,NSLayoutContraint
有一个设置乘数的选项。因此,例如,如果您想沿 Y 轴将标签设置在超级视图顶部和中心的中间,您可以这样做:
view.addSubview(loadingLabel)
loadingLabel.translatesAutoresizingMaskIntoConstraints = false
loadingLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
NSLayoutConstraint(item: loadingLabel, attribute: .centerY, relatedBy: .equal, toItem: view, attribute: .centerY, multiplier: 0.5, constant: 0).isActive = true
锚约束简化了添加约束,但故事板中可用的乘数 属性 似乎不适用于所有类型的约束。
例如,作为
view.addSubview(loadingLabel)
loadingLabel.translatesAutoresizingMaskIntoConstraints = false
loadingLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
loadingLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
但是,显然,当您 可以 设置长度限制的乘数时:
someView.heightAnchor.constraint(equalTo: heightAnchor, multiplier: 0.4)
您不能将类似的参数添加到 CenterX 或 CenterY 参数,可能是因为 Apple 认为这对某个点没有意义,尽管您可以在情节提要中这样做 discussed in this question.
将乘数添加到使点居中以使该点与顶部屏幕大小成比例的最佳方法是什么?
您不能为 X 和 Y 轴约束的锚点方法添加乘数,它们仅适用于维度锚点。但是,NSLayoutContraint
有一个设置乘数的选项。因此,例如,如果您想沿 Y 轴将标签设置在超级视图顶部和中心的中间,您可以这样做:
view.addSubview(loadingLabel)
loadingLabel.translatesAutoresizingMaskIntoConstraints = false
loadingLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
NSLayoutConstraint(item: loadingLabel, attribute: .centerY, relatedBy: .equal, toItem: view, attribute: .centerY, multiplier: 0.5, constant: 0).isActive = true