【问题标题】:UIScrollView Interaction Area does not update with frame/contentSizeUIScrollView 交互区域不随 frame/contentSize 更新
【发布时间】:2012-01-10 17:53:48
【问题描述】:

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

相应地,内容视图(UIScrollView 内的 UIView)被更新,我设置了 UIScrollview 的 contentSize。

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

图 1 显示了原始方面/图 2 显示了新的方面,其中奇数区域可供用户滑动手势使用。

如您所料,我已经修改了滚动视图中的许多设置,例如边界等,但迄今为止没有任何“修复”此行为。

任何关于为什么会发生这种行为和/或如何将用户交互区域设置为滚动视图的框架/边界的见解将不胜感激。

EDIT2:

此层次结构中有 3 个视图
风景
主视图框架 {0,0,1024,748}
结果视图框架 {633,90,361,677}
滚动视图框架 {20,60,340,595}

肖像
mainView 框架 {0,0,532,1240} 结果视图框架 {0,659,768,345}
滚动视图框架 {0,70,768,280}

此时 我进入了项目中的每个 nib,并确保关闭了自动调整大小,并且我还用不同的数字标记了每个视图,以便在当我检查框架时,我可以确定我所看到的内容是肯定的。

堆栈中的顶层视图是自动调整大小的,现在关闭它,我得到了肖像结果..

主视图框架 {0,0,768,1004} ..... 是的!赢.....
结果视图框架 {0,659,768,345}
滚动视图框架 {0,70,768,280}

编辑1:

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

【问题讨论】:

    标签: ios uiscrollview frame gesture bounds


    【解决方案1】:

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

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

    【讨论】:

    • 好吧,我可以看到superview的frame总是足够大,可以容纳scrollview的frame。还有什么我需要寻找的吗?
    • 你为什么不编辑你的问题来显示scrollView的框架和superview的框架? (根据您的层次结构,在视图控制器的视图上显示更多的超级视图可能很有用)。你也可以试试myScrollView.superview.autoresizesSubviews = NO;
    【解决方案2】:

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

    [_yourView setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];
    

    【讨论】:

    • 我没有尝试过 - 在这个阶段我愿意牺牲一只山羊或至少几只鸡) - 所以稍后会尝试
    • 好吧,已经尝试过了——滚动视图框架现在与交互区域的宽度完全匹配(即远小于滚动视图的预期宽度)。还尝试确保将滚动视图带到主容器的前面 - 不高兴
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多