针对最新的iPad Pro模拟器进行优化
我已经安装了最新的Xcode 7.1测试版,并尝试在iPad Pro模拟器上运行我的项目。 一切都是正确的,所有的功能都是正确的。
但是我的屏幕尺寸有问题
在应用程序的主屏幕上,我运行下一个日志:
NSLog(@"%f", self.view.bounds.size.width);
我有1024为横向。 但是当我在Xcode 7.1中创建一个新的应用程序并在主屏幕上运行相同的代码时,我会得到另一个值:1366。
今天我计划在使用Araxis Merge的旧Xcode(6.4)和最新beta 7.1中创建的项目文件之间找到差异。
你现在如何解决这个问题,为我的旧项目?
我可能会离开这里,但我在iPad Pro模拟器上遇到类似的问题:它一直给我提供标准的1024 * 768分辨率。 经过一番挖掘,我意识到我正在使用标准的iPad启动图像(因为资产目录中没有iPad Pro版本),这限制了我的屏幕保持1024 * 768点。 一旦我推出了发布故事板,一切就会落实到位,我的应用程序以正确的1366 * 1024磅的尺寸发布。
TL; DR viewDidLayoutSubviews:
在调用viewWillLayoutSubviews:
和viewDidLayoutSubviews:
之前,似乎没有为iPad Pro屏幕大小调整视图层次结构。 当这由布局系统调用时,取决于您的视图层次结构的构造。
在为iPad Pro更新我的应用程序时,我也看到了类似的行为。 因此,我深入了解了视图控制器生命周期事件,以了解现有项目以及新项目中发生的情况。
对于一个全新的项目,使用仅具有导航栏(位于状态栏下方)的视图控制器和主视图(占用剩余空间,打开自动布局,在横向模式下la以下屏幕截图:
我在控制台上看到以下视图控制器生命周期的输出:
-[ViewController viewDidLoad] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[ViewController viewDidLoad] self.primaryView: .frame: {{0, 64}, {1024, 704}}; .bounds: {{0, 0}, {1024, 704}}
-[ViewController viewWillAppear:] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[ViewController viewWillAppear:] self.primaryView: .frame: {{0, 64}, {1024, 704}}; .bounds: {{0, 0}, {1024, 704}}
-[ViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[ViewController viewWillLayoutSubviews] self.primaryView: .frame: {{0, 64}, {1024, 704}}; .bounds: {{0, 0}, {1024, 704}}
-[ViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[ViewController viewDidLayoutSubviews] self.primaryView: .frame: {{0, 64}, {1366, 960}}; .bounds: {{0, 0}, {1366, 960}}
-[ViewController viewDidAppear:] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[ViewController viewDidAppear:] self.primaryView: .frame: {{0, 64}, {1366, 960}}; .bounds: {{0, 0}, {1366, 960}}
从我在这里可以看到的情况来看,视图宽度为1024点,但是一旦执行了“viewDidLayoutSubviews”,就确定了合适的尺寸(1366点)。
在我自己的一个使用分屏控制器的屏幕项目中,我可以看到类似的行为:
-[XYZViewController viewDidLoad] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[XYZViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[XYZViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewWillAppear:] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewDidAppear:] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
在这种情况下,由于视图层次结构不同, viewWillLayoutSubviews:
在视图控制器生命周期的早期被调用,并且正确的大小已由viewWillAppear:
调用时间确定。 但是,正如您所看到的,这实际上取决于您的视图层次结构 - 所以我建议您确认视图层次结构,然后确定添加依赖于决议的代码的最佳位置。
如果您由于某些原因而硬编码任何UI元素的框架,则可能需要为即将推出的iPad Pro进行更改。 因为它的屏幕尺寸(以点为单位)完全不同。
如果你使用自动布局和动态帧(例如self.view.bounds.size.width),它应该工作正常,我猜。
链接地址: http://www.djcxy.com/p/87857.html