在窗口顶部添加的 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
上方。
无论如何,视图都很好地呈现,它可以像我想要的那样覆盖整个屏幕。但有一个问题。当我旋转设备时,这个顶视图不旋转,但视图在下面。
我在ios5
和iOS6
上进行了测试,但没有运气。也将此代码放入委托中:
- (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 上不旋转的主要内容,如果未能解决你的问题,请参考以下文章