UIScrollView内容偏移阻止用户交互

时间:2011-10-07 15:25:14

标签: iphone objective-c xcode ipad uiscrollview

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

这个想法是能够在两个方向上使用它,纵向...它将是全屏但在风景中用户必须滚动才能访问所有内容但是我有一些问题试图让它到达工作正常。

以下是我的观点:

UIView - > UIScrollView - > UIView - > UIImageView - >使用手势识别器进行子视图。

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

在Portrait中,这将完美无缺地工作,但是当我旋转到横向时,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 个答案:

答案 0 :(得分:0)

我最终想到了......这是一个框架大小改变的问题......我所要做的就是在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)];

它只是确保一旦旋转框架被重置回视图的大小...我认为这是autoresize蒙版的问题,但我没有时间玩它们,这只是工作只是同样。