目前,在uiview(屏幕的底部)后面有一个滚动视图(整个屏幕)。我试图检查滚动条上的标签是否被uiview覆盖(这种情况发生在iphone上)。有没有办法检查uiview是否覆盖了scrollview上的标签?我尝试使用scrollview上标签的中心cgpoint来查看它是否小于uiview上的一个点,但它不允许我比较两个cgpoints的大小:
if atmLabel.center < CGPoint(x: 156, y: 570) {
buttonView.dropShadow(shadowOpacity: 0.5)
}
答案 0 :(得分:4)
对于点检查,您应该使用
包含CGRect的功能......总之这应该可行
let view = UIView()
let label = UILabel()
if label.frame.contains(view.frame) {
//Do your stuff...
}
将视图hiearchy与Xcode一起使用
或者您只需打印出当前的viewController子视图
即可print(self.view.subviews)
这打印出UIView子类的数组,按视图层的升序排序...我推荐第一种调试方法:)
答案 1 :(得分:4)
如果你想看看代码中是否有两个视图重叠,我认为这应该有效:
if view1.frame.intersects(view2.frame) {
// handle overlap
}
答案 2 :(得分:3)
您的视图层次结构:
parentView
- scrollView
- - label
- topView
框架矩形,用于描述视图在其父视图的坐标系中的位置和大小。
https://developer.apple.com/documentation/uikit/uiview/1622621-frame
您不能简单地比较label
和topView
的帧,因为frame
在超级视图坐标中的位置,又topView.frame
在parentView
坐标中并且{ {1}}在label.frame
坐标中。
因此,您需要将scrollView
转换为label
或将parentView
转换为topView
坐标。让我们来看第一个变体:
scrollView
之后,您可以检查此框架是否与let frameInParent = parentView.convert(label.frame, from: label.superview)
的相交:
topView
但这仅在不对视图进行任何变换的情况下才适用,因为再次框架文档:
警告
如果transform属性不是恒等变换,则此属性的值不确定,因此应忽略。