如何获取从 UIView 到另一个 UIView 的垂直距离?



正如标题所暗示的那样,我很难找到一种方法来计算UIViews之间的垂直距离。 假设我在视图控制器中有两个按钮。我将如何获得指示按钮 1 底部和按钮 2 顶部之间距离的 CGFloat?

正如@lobstah已经指出的那样,可以通过访问相关视图的框架来计算差异。

但是,必须考虑一个重要的细节:如果视图共享相同的父视图,则这仅适用于这种简单方式。因为只有这样,帧才会相对于相同的坐标空间来表示。

通用方法没有此限制,只要视图是同一视图层次结构的一部分(不出现在不同的窗口中(并且未被仿射转换缩放/旋转,该方法将始终有效:

func distanceBetween(bottomOf view1: UIView, andTopOf view2: UIView) -> CGFloat {
let frame2 = view1.convert(view2.bounds, from: view2)
return frame2.minY - view1.bounds.maxY
}

如果视图 2 的顶部低于视图 1 的底部,则距离将为正。

您可以使用顶部视图的 maxY 和底部视图帧属性的 minY:bottomView.frame.minY - topView.frame.maxY

最新更新