更改 iPad 方向、旋转状态栏、工具栏,但不更改主视图

Posted

技术标签:

【中文标题】更改 iPad 方向、旋转状态栏、工具栏,但不更改主视图【英文标题】:Changing iPad orientation, rotating statusbar, toolbars, but not the main view 【发布时间】:2010-09-15 22:33:18 【问题描述】:

我正在尝试设置一个基于窗口的 iPad 测试应用程序,其中我有一个视图控制器和一个视图。当我旋转 iPad 时,我希望改变工具栏的方向,而不是视图本身的方向。例如,您使用的一种背景视图固定在设备上,但状态栏和工具栏围绕它旋转。这将使用户能够从各个角度查看视图,但始终使用方向正确的工具集。

我想要的一个漂亮的实现可以在 iPad 的画笔应用程序中找到,其中绘画的方向锁定到设备,工具栏围绕它旋转。我认为其他绘画应用程序也做同样的事情。

我一直在试图弄清楚如何做到这一点,但是在这里用尽了许多其他关于方向的问题之后,我仍然不知所措。

任何人都可以为我指出正确的解决方案吗? autoresizeMask 的自动调整大小的特定组合?用另一个相反方向的旋转动画来对抗旋转动画?使用多个并发视图控制器,一个用于旋转视图,一个用于非旋转视图?

非常感谢,

(编辑:在 Olie 发表评论后试图澄清问题。)

【问题讨论】:

我对您的问题投了赞成票,但您可能希望对其进行简短的编辑,以澄清您正在寻找的效果是保留一种“背景图像/视图”锁定到设备,视图控制器在顶部旋转。我现在明白了,但我最初阅读问题时并不清楚。 【参考方案1】:

为了防止旋转,您可以将它放在视图控制器的 .m 中:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

    return (interfaceOrientation == UIInterfaceOrientationPortrait);

但是您说您仍然希望视图框架调整大小以响应旋转。我自己不需要这样做,所以我不确定将autoresizingMask 设置为具有灵活的宽度和高度是否足够;您可能还必须实现 didRotateFromInterfaceOrientation: 并使用 setNeedsLayout 和/或手动调整视图大小。

【讨论】:

感谢您的回复,但是控制单个视图的旋转确实不是这里的问题。我想要的是保持主视图固定,当方向改变时状态栏和工具栏围绕它旋转。让整个屏幕旋转或不旋转是小菜一碟,手头的问题是同一屏幕的不同部分的旋转行为不同。【参考方案2】:

前段时间我遇到了一个错误——我很确定你的要求会让你遭到 Apple 的 HIG 违规拒绝。但是,我会尝试记住问题所在。我很确定它是这样的:

我有一个 tabbarViewController,上面写着“我面向任何方向。”

其中一个标签是一个普通的旧 UIViewController,上面写着“我只做 LandscapeLeft 和 L-Right”

当您旋转时,内部 (UIVC) 保持不动,但外部 (TabVC) 围绕物体旋转。

我可能有一些倒退的细节或以其他方式令人费解,但总体思路是:堆叠的 VC,而不是所有一个 VC。

祝你好运!

【讨论】:

感谢您的回答。实际上,我不久前就开始工作了。有人向我指出了解决方案:在您希望其视图保持固定的视图控制器的-loadView 方法中,使用UIWindow-insertSubview:belowSubview: 方法,在导航控制器的视图下方插入非旋转视图。这完全正确。 啊,你去。非常相似的想法,您只是将第二个视图附加到窗口,而我堆叠了视图控制器。一般来说,我倾向于尝试在窗口中有一个视图(带有它的视图控制器),然后是其他所有的子视图。我不知道为什么,但它对我来说只是感觉“更干净”。无论如何,你的方式是有效的——而且并不糟糕——这才是最重要的。【参考方案3】:

就我合作过的情况而言,我看不到您的问题有任何简单的答案。旋转所有内容(标签栏、导航和状态栏、您的视图控制器)然后在“旧坐标”中重绘视图控制器的内容,这样对于用户来说它看起来好像没有旋转呢?

【讨论】:

以上是关于更改 iPad 方向、旋转状态栏、工具栏,但不更改主视图的主要内容,如果未能解决你的问题,请参考以下文章

如果搜索,则在方向更改时不会恢复工具栏中的搜索图标

如何更改 iDevice (iPad/iPhone) 的方向?

在 iPad 中旋转全屏视频时,导航栏和状态栏之间出现奇怪的重叠错误

在 SwiftUI 中更改方向时更新 UI

iOS_book03 -自动旋转自动调整大小尺寸分类器

收到方向更改通知时状态栏方向错误