UIScrollView交互区域不会使用frame / contentSize更新

时间:2011-12-01 15:29:42

标签: ios uiscrollview frame gesture bounds

我有一个UIScrollView,它以纵向方面开始,随后我(在设备旋转后)移动到另一个横向方面的框架。

相应的内容视图(UIScrollView中的一个UIView)已更新,我设置了UIScrollview的contentSize。

问题是 - 旋转后 - UIScrollView有一个新框架,新内容和新的contentSize,但用户可以在其中滑动的区域仍然表现得像原始框架/内容一样。

图像1显示原始方面/图像2显示了新方面,用户可以使用奇数区域进行滑动手势。

Original aspect of scroll view New aspect

正如您所料,我已经摆弄了滚动视图中的一些设置,例如边界等,但迄今为止没有任何事情“修复”这种行为。

有关此行为发生原因的任何见解和/或如何将用户交互区域设置为滚动视图的框架/边界将非常感激。

EDIT2:

此层次结构中有3个视图 Lanscape
mainView框架{0,0,1024,748}
resultsView Frame {633,90,361,677}
scrollView Frame {20,60,340,595}

肖像
mainView框架{0,0,532,1240}< ---哇哇哇哇 - 我期待.... {0,0,768,1004}
resultsView Frame {0,659,768,345}
scrollView Frame {0,70,768,280}

此时 我进入项目中的每个笔尖并确保自动调整功能已关闭 并且我还使用不同的编号标记每个视图,以便在我正在检查框架的时间我可以确定我所看到的确实是肯定的。

堆栈中的顶级视图WAS自动调整,现在关闭它我得到了这个肖像结果..

mainView Frame {0,0,768,1004} .....是的! WIN .....
resultsView Frame {0,659,768,345}
scrollView Frame {0,70,768,280}

EDIT1:

将调整大小蒙版设置为下面的注释会减小滚动视图的可见大小以匹配交互区域 - 因此看起来滚动视图确实认为它的帧只是那个大小(768看起来像468左右)。增加框架的宽度确实增加了滚动视图的大小,但全宽只有 768像素,那么为什么768宽的框架看起来像468而框架看起来像686 568!

2 个答案:

答案 0 :(得分:4)

听起来你的滚动视图的超级视图没有正确调整大小。您可以通过记录[myScrollView superview]并查看该视图是否按预期调整大小来验证这一点。

如果超级视图没有调整大小,那么它不会将触摸传递到您的滚动视图,这解释了您所看到的行为。 (这也解释了为什么在设置自动调整遮罩时调整大小。)

答案 1 :(得分:2)

您是否尝试在对象上使用以下方法?

[_yourView setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];