在窗口顶部添加的 UIView 在 iOS 上不旋转

Posted

技术标签:

【中文标题】在窗口顶部添加的 UIView 在 iOS 上不旋转【英文标题】:UIView added on top of window does not rotate on iOS 【发布时间】:2013-02-05 09:39:33 【问题描述】:

我有一个基于tabBar 的应用程序,想在整个屏幕上方显示一些自定义视图(不是模态视图),我这样做:

[self.view.window addSubview:self.myViewController.view];

我这样做的原因是因为这种方式视图位于UITabBar上方。

无论如何,视图都很好地呈现,它可以像我想要的那样覆盖整个屏幕。但有一个问题。当我旋转设备时,这个顶视图不旋转,但视图在下面。

我在ios5iOS6 上进行了测试,但没有运气。也将此代码放入委托中:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window

    return UIInterfaceOrientationMaskAll;

类似的代码在 myViewController 的视图中:

- (NSUInteger)supportedInterfaceOrientations

    return UIInterfaceOrientationMaskAll;

视图只是不旋转...?

【问题讨论】:

【参考方案1】:

据我所知,只有窗口的第一个子视图会获取旋转事件。您正在向窗口添加另一个视图(您的视图),因此需要自己处理传播旋转事件。

为您提供一些真正的快速帮助,只需查看以下实现:AGWindowView(自 2016 年起不再维护)

【讨论】:

好吧,我得换个方式了。替换 rootViewController 可能是更好的解决方案。谢谢! 是的,您可以将其添加为第一个窗口子视图的子视图(即作为您的 rootViewController 视图的子视图)。 'UIWindow* 窗口 = [UIApplication sharedApplication].keyWindow; if (!window) window = [[UIApplication sharedApplication].windows objectAtIndex:0]; [[[窗口子视图] objectAtIndex:0] addSubview:myView];' 我刚试过这个,它有效。但是在旋转变化时,UITabBar 出现了,然后又消失了...... 不是“只有第一个子视图”。只有一个,是的。只有最上面可见的子视图和它的父视图(或视图控制器的视图)在响应者链上可以旋转。 请为您的演示添加正确的链接。下面的链接不存在。所以请添加链接。谢谢【参考方案2】:

您可以为您的 UIWindow 设置 rootController。 例如:

fileprivate(set) var bottonOverlayWindow = UIWindow()

self.bottonOverlayWindow.rootViewController = self; 

// 'self' 将是您在其上添加 UIWindow 视图的 ViewController。所以每当你 ViewController 改变方向时,你的窗口视图也会改变它的方向。

如果您遇到任何问题,请告诉我。

【讨论】:

以上是关于在窗口顶部添加的 UIView 在 iOS 上不旋转的主要内容,如果未能解决你的问题,请参考以下文章

addSubview 在 iOS 3.1.3 上不显示视图

Swift:UIView.insertSubview( , aboweSubview) 在 iOS 8 上不起作用

滑动手势在 IOS 中的 UIView 上不起作用

UiButton 点击​​在 UIView 上不起作用

iOS - 在窗口中获取视图的位置?

在UI视图顶部的OpenGL GLKView覆盖 - iOS / Xcode