实现与自动布局约束的百分比重叠
Achieve a percentage overlap with Autolayout constraints
假设 View1 和 View2 是两个大小相同的矩形。使用自动布局,我可以设置 View1.Center X = View2.Leading 以使 View1 和 View2 在 X 方向的一半重叠。现在我需要这个重叠是不同的百分比,假设重叠 1:3 或任何其他分数。我怎样才能通过自动布局约束实现这一点?
它不像设置 view2 的前导到 view1 的中心 X 那样简单,但您可以通过在运行时调整前导约束的 constant
属性 来做到这一点,最好是 [=13] =] 视图 1 已设置。
先做view2.leading == view1.trailing
:
leadingConstraint = NSLayoutConstraint(item: view2, attribute: .Leading, relatedBy: .Equal, toItem: view1, attribute: .Trailing, multiplier: 1.0, constant: 0.0)
然后,根据您定义视图的位置(在视图或视图控制器中),您在放置所有视图后立即更新相关约束的常量输出:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
leadingConstraint.constant = -(view1.frame.width / 3.0)
}
您可以下载我为您创建的 the sample project 并尝试使用它以更好地理解。
我最终通过创建一个宽度与 view1 的宽度成比例的不可见视图来完成此操作。然后将 view2 设置为仅相对于不可见视图。这样,通过改变我选择的比例,我可以达到我需要的任何百分比,包括 1/2 或 1/3。
假设 View1 和 View2 是两个大小相同的矩形。使用自动布局,我可以设置 View1.Center X = View2.Leading 以使 View1 和 View2 在 X 方向的一半重叠。现在我需要这个重叠是不同的百分比,假设重叠 1:3 或任何其他分数。我怎样才能通过自动布局约束实现这一点?
它不像设置 view2 的前导到 view1 的中心 X 那样简单,但您可以通过在运行时调整前导约束的 constant
属性 来做到这一点,最好是 [=13] =] 视图 1 已设置。
先做view2.leading == view1.trailing
:
leadingConstraint = NSLayoutConstraint(item: view2, attribute: .Leading, relatedBy: .Equal, toItem: view1, attribute: .Trailing, multiplier: 1.0, constant: 0.0)
然后,根据您定义视图的位置(在视图或视图控制器中),您在放置所有视图后立即更新相关约束的常量输出:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
leadingConstraint.constant = -(view1.frame.width / 3.0)
}
您可以下载我为您创建的 the sample project 并尝试使用它以更好地理解。
我最终通过创建一个宽度与 view1 的宽度成比例的不可见视图来完成此操作。然后将 view2 设置为仅相对于不可见视图。这样,通过改变我选择的比例,我可以达到我需要的任何百分比,包括 1/2 或 1/3。