获取UIView的可见矩形区域

12

我有一个包含自定义 UIViewUIScrollView。在自定义的 UIView 内部,我想知道它可见的矩形(即未被裁剪的部分)。

快速且不太优雅的解决方案是让自定义视图假定其父视图是 UIScrollView,并通过它获取内容大小,但我正在寻找一种更好的解决方案,不涉及这样的假设。

3个回答

18

这样应该就行了

CGRect visibleRect = CGRectIntersection(self.frame, superview.bounds);

在UIView中使用它,这将为您提供代表该视图在其父视图(UIScrollView)中可见部分的矩形(如果有的话)。 我假设这里它们之间没有视图,但是如果有,调整代码应该很容易。

希望我能帮到您!


2
这不应该是 superview.bounds 吗?因为 superview 的 frame 是在它的 superview 的坐标空间中。 - Awesome-o
@Awesome-o:你说得对。我的原始代码假设superview填满整个屏幕(0, 0原点),但使用bounds会更安全,以防万一它不是这样。已更新答案。 - foslock

2

希望您能提供更多信息,说明您试图完成的目标。

如果您想要知道超级视图的大小,您可以这样做:

CGRect superFrame = [self superview].frame;

不,那样行不通。我要找的是视图的可见矩形,而不是整个视图的框架矩形。例如,如果UIView A 的一部分与另一个UIView B 重叠,那么UIView A 对用户可见的区域是什么? - Dia Kharrat

1

Swift 3

extension UIView {
    var visibleRect: CGRect? {
        guard let superview = superview else { return nil }
        return frame.intersection(superview.bounds)
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接