我正在编写一个视频处理应用程序,当ios 8.1问世时,它正准备将其提交到应用程序商店。我更新了我的iPhone以及XCode,一切都搞得一团糟。在我简单的单一视图控制器界面中,除了状态栏之外,没有任何东西可以旋转,状态栏也不会在横向模式下自动隐藏...
我认为这是因为我使用了已弃用的willAnimateRotationToInterfaceOrientation:对于我所拥有的少量自定义旋转操作,所以我实现了traitCollectionDidChange:和viewWillTransitionToSize:来改变规格。但是,在我的应用程序中永远不会调用viewWillTransitionToSize,并且traitCollectionDidChange:在启动时仅调用一次。设备根本没有告诉应用程序设备已旋转。
谷歌搜索后我也尝试使用名称:UIDeviceOrientationDidChangeNotification。至少我的选择器会被调用,但我不知道如何手动处理所有旋转。
我的didFinishLaunching ...和viewDidLoad非常简单。分配UIWindow,storyboard,从那里设置我的viewcontroller,使它成为rootviewcontroller,makekeyandvisible。全部基于Apple的AVFoundation演示应用程序之一。 然后在didload中我添加了一些子视图和一个工具栏等,没有什么不同寻常的,显然它在各种设备以及7.1模拟器等上都可以在8.0和8.0.2上运行。仍然在我的iPad上运行完美无缺8.0。 2 ...原因我没有发布任何代码是我100%确定一切都是正确的。
主要奇怪的是我似乎找不到任何有这个问题的人。 控制台或其他地方也没有错误。
有没有人知道可能导致这种情况的原因?我不认为一个点发布会产生如此巨大的差异,而且没有其他人似乎有这个。它可能是实际故事板文件中的问题/错误吗?
主要是因为我可以通过UIDeviceOrientationDidChangeNotification获取旋转通知,如何手动处理所有旋转/调整大小的内容?我一直在寻找答案,但无济于事,目前没有时间花在这个项目上:(
干杯!
答案 0 :(得分:6)
分配UIWindow将是问题所在。
首先,确保您的导航控制器(或您正在使用的任何设备)设置为"初始视图控制器"在你的故事板中。
其次,在AppDelegate.m文件中,删除对应用程序didFinishLaunchingWithOptions中出现的UIWindow和rootViewController的任何引用。在我的情况下,删除以下两行修复了我的问题。
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self.window makeKeyAndVisible];
如果使用故事板,您也不需要设置窗口rootViewController
。
使用故事板时根本不需要它们,但在8.1之前,使用它们从未造成任何伤害。花了我2天的时间才弄明白这一点,所以希望它能帮助你和其他人。