【问题标题】:Autoresize all UIScrollView subviews properly on orientation change在方向更改时自动调整所有 UIScrollView 子视图的大小
【发布时间】:2011-10-22 09:56:01
【问题描述】:

我有:

  • 底部有 1 个分页滚动视图(类似于面板),最初为 768x100 像素,设置为在 iPad 旋转为横向时拉伸到 1024。
  • 2 个子视图,每个 768x100 像素大;一个在原点 0,0,一个在原点 768,0。在纵向模式下,用户可以左右滑动在这些面板之间切换。

当我旋转到横向时,即使自动调整大小正确,子视图仍保持相同大小。它们也保持在相同的位置,这意味着右侧窗格现在出现在距离右侧 256 像素的“in”处。

有没有办法使用自动调整大小来解决这个问题?我是否必须手动调整旋转的子视图?

【问题讨论】:

  • 如果您使用的是 IB,那么可以使用自动调整大小来完成。
  • 我正在使用 IB。你确定吗?会玩弄属性。我将自动调整大小设置为灵活的宽度和灵活的高度。我也有灵活的所有边距。我可以尝试为左手设置 left non-flex,反之亦然,但我认为它们仍应调整大小。
  • 等等。他们正在调整大小。你说得对。不更新 contentSize 似乎是问题所在。作为答案发布?
  • 是的,我已经发布了一个简短的答案。

标签: iphone ios uiscrollview rotation autoresize


【解决方案1】:

如果界面构建器方法不起作用,或者如果您有复杂的子视图需要重新对齐,那么您可以这样做 -

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if(interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
       interfaceOrientation == UIInterfaceOrientationLandscapeRight)
    {
        /* handle resizing here*/
    }
    else if(interfaceOrientation == UIInterfaceOrientationPortrait || 
            interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
    {
    }
}

我可能错了,还有check this

【讨论】:

  • 我知道如何调整大小,谢谢。问题不在于如何去做,问题是我是否必须这样做。沿着这条路走下去往往不是一个好主意,因为它需要的“手动”更改越多,您投入的越多。
  • 不一定,要在两个方向上为用户提供最佳体验,您需要为此付出痛苦。如果你仔细想想,它不是那个手册。这是 Apple 在其Human Interface Guidelines for Designing Apps on iOS 中提到的要点之一。
  • 真的吗?我查看了指南并阅读了“处理方向更改”部分,并没有看到任何鼓励用户这样做的内容……将阅读更多内容并查看我的发现。谢谢。
  • 为什么在“shouldAutorotateToInterfaceOrientation”中重新对齐?无论实际旋转如何都避免调整大小(可能返回false)。视图调整大小不应该发生在“willRotateToInterfaceOrientation”或 didRotateToInterfaceOrientation 中吗?
【解决方案2】:

据我所知,您必须手动调整子视图。因为 UIScrollView 的 contentSize 属性定义了为 Span&Zoom 显示的视图的大小。它通常与容器(即滚动视图)大小没有任何关系。

【讨论】:

    【解决方案3】:

    您可以在界面生成器上使用自动调整大小。

    【讨论】:

    • 我已经让它几乎可以工作了,但原点仍然没有改变。知道调整大小应该是什么样子吗?我试过翻转左右两侧的弹性体等等,但没有运气。哦,除非我遗漏了什么,否则您还必须覆盖 setFrame: 以更改 contentSize 以适应新的方向。你不这样做吗?
    • 如果您在所有元素的方向上使用自动调整大小,则无需设置框架。
    • 我没有说“设置框架”,我说的是“在 setFrame 上更改 contentSize”......而且我确实有自动调整大小。我现在正在手动执行此操作,但我真的很想看到一个“本机”工作的示例。
    猜你喜欢
    • 2014-11-02
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多