如何在 UIScrollView 的滚动指示器下方放置非滚动 UIView?
Posted
技术标签:
【中文标题】如何在 UIScrollView 的滚动指示器下方放置非滚动 UIView?【英文标题】:How can I place a non-scrolling UIView underneath the scroll indicators on a UIScrollView? 【发布时间】:2012-04-03 10:44:30 【问题描述】:我有一个应用程序,我使用缩放滚动视图将图像裁剪为具有固定纵横比的矩形。我有一个蒙版,可以将要裁剪的图像部分变暗。目前我将此子视图添加到 UIScrollView 的父级,使它们成为兄弟,其中此掩码比滚动视图“更高”。看起来很棒。除了...
这个掩码也掩盖了滚动指示器,因此看起来有点笨拙。我可以关闭 scrollIndicators,或者,理想情况下,我想将此 UIView 放在 scrollIndicators 下方,但不会与其他内容一起滚动,如果我通过 [scrollView addSubview: myMaskView];
有人知道这是否可行吗?
【问题讨论】:
【参考方案1】:首先,继承 UIScrollView 以便您可以修改滚动视图的默认行为。
第二次用你的图片创建一个图片视图,并将图片视图和你的遮罩视图都放到一个滚动视图中,这样你的视图就会在滚动指示器的下方。
第三,在您的滚动视图委托方法viewForZoomingInScrollView: 中,返回您的图像视图,以便仅缩放图像视图。请注意,滚动视图会将内容大小调整为返回视图的大小,但只要您的图像视图占据整个内容大小就可以了。
最后,覆盖 layoutSubviews 方法,将遮罩视图移动到滚动视图的可见边界。 layoutSubviews 方法据说在滚动的每一帧都会被调用,因此最终用户不会看到位置变化。
更多详情,您可以参考 WWDC 会议视频“高级 ScrollView 技术”。
编辑:好的,刚刚发现可以通过实现委托方法scrollViewDidScroll来避免覆盖layoutSubviews。
【讨论】:
以上是关于如何在 UIScrollView 的滚动指示器下方放置非滚动 UIView?的主要内容,如果未能解决你的问题,请参考以下文章