UIScrollView 内容偏移量会阻塞用户交互

Posted

技术标签:

【中文标题】UIScrollView 内容偏移量会阻塞用户交互【英文标题】:UIScrollView content offset blocks user interaction 【发布时间】:2011-10-07 15:25:13 【问题描述】:

我正在制作一个包含滚动视图的应用程序,其中包含一些基于 UIGestures 构建的子视图...

这个想法是能够在两个方向上使用它,纵向..它将是全屏的,但在横向上,用户必须滚动才能访问所有内容,但是我在尝试获取它时遇到了一些问题正常工作。

以下是我的观点:

UIView -> UIScrollView -> UIView -> UIImageView -> 带有手势识别器的子视图。

第一个 UIView 只是 UIViewControllers 视图,UIScrollView 将/应该处理方向上的差异,第二个 UIView 只是一个停止定位搞砸的容器, UIImageView 保存我的图像什么是我有的图表在 UIImageView 中/上方放置了一系列自定义复选框和标签,以显示内容并接收和处理交互...

在纵向中,这将完美无缺,但是当我旋转到横向时,UIScrollView 内的内容向上移动 128 像素,因此顶部无法访问......这也使得底部 128 像素太大,因此存在透明间隙。 .

我可以通过在 didRotateFromInterfaceOrientation: 函数上运行此代码来解决此问题:

int offset = 0;
if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) 
    offset = 128;
else 
    offset = 0;
[scrollView setContentInset:UIEdgeInsetsMake(offset, 0, -offset, 0)];

上面的代码只是改变了 ContentInset 的 top 和 bottom 属性,以将位置调整为单向 128 像素...然后滚动视图将很好地显示内容...

但是,当我尝试触摸距底部 128 像素内的任何手势时,它们将不起作用! 我已经尝试了很多让它工作,但如果我不改变 contentInset 他们仍然无法工作(从底部开始 128 以内)......这真的让我感到困惑,因为我的所有 userInteractionEnabled 都设置为 YES视图,但它仍然无法正常工作,其他任何内容都会在这个 128 像素区域内正常显示...

有没有人知道这有什么问题或有什么我可以尝试的,因为我觉得我已经尝试了所有可能的方法。

感谢阅读,

利亚姆

【问题讨论】:

【参考方案1】:

最后我想通了...这是帧大小更改的问题...我所要做的就是在 didRotate 函数上运行此代码:

int offset = 0;
if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) 
    [scrollView setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    offset = 128;
 else  
    [scrollView setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    offset = 0;

[scrollView setContentInset:UIEdgeInsetsMake(offset, 0, -offset, 0)];

它只是确保框架在旋转后重置回视图的大小......我认为这是自动调整大小蒙版的问题,但我没有时间玩它们,这只是也是。

【讨论】:

以上是关于UIScrollView 内容偏移量会阻塞用户交互的主要内容,如果未能解决你的问题,请参考以下文章

根据 UIScrollView 的内容偏移量移动 UIView

UIScrollView 最大和最小内容偏移量?

UIScrollview 动画取决于内容偏移

UIScrollView 不滚动偏移内容

UIScrollView 的内容偏移被重置

为啥 MYSQL 更高的 LIMIT 偏移量会减慢查询速度?