2015-01-09 65 views
0

我的根视图控制器是一个选项卡视图控制器。我的应用程序只是横向模式。它在项目设置和故事板中为包括根在内的每个VC设置。在viewDidLoad中,我有:Xcode 6 iOS 7查看大小

NSLog(@"width of view in didappear:%f",self.view.frame.size.width); 

和viewDidAppear中的相同代码。在iOS 8的viewDidLoad中,该行输出480.在iOs 7中,它打印出320(纵向模式下的屏幕宽度),但在viewDidAppear中打印出480,这是正确的。是的,对于那些总是在寻找“精确”细节的人来说,它是同样的设备。

为什么视图仍然在纵向viewDidLoad在ios7而不是在ios8?可以做什么?我在viewDidLoad中设置了我的整个视图,因为我只需要执行一次,因此无法将其迁移到viewDidAppear或其他位置。

回答

1

这是iOS 7和8之间的奇怪区别,如果是这样的话。我猜这是相同的设备类型但物理上不同的项目?或者你真的在同一个设备上运行iOS 7 & 8?

所以你理论上仍然有设置差异。即iOS 7设备锁定在肖像等

如果设置是真的如你所说,一个布尔属性将帮助你在viewDidAppear运行。我刚刚提供了一个如何在这里完成的例子:https://stackoverflow.com/a/27867549/1111233

+0

通过相同的设备,我的意思是在模拟器中,我尝试使用ios7和8的iPhone 4s。我尝试使用边界作为其他人指出,它没有工作,仍然是同样的问题。所以我将你的答案作为一个bandaid来实现。 – SAR392 2015-01-09 19:49:11

0

基本上,viewDidLoad在UIElements被加载并放置在屏幕上之前运行,所以这就是为什么你得到错误的大小。就iOS7和iOS8的区别而言,我猜苹果稍微改变了内部,但无论如何,你绝对应该将你的图形代码移到viewWillAppear。图形被加载时viewWillAppear中运行和工作方式相同viewDidLoad中

0

使用边界

CGRect rect = [[UIScreen mainScreen] bounds]; 

NSLog(@"width of view in didappear:%f",rect.size.width); 
0

帧是相关的父视图。最上面的视图是UIWindow,它在iOS 8中成为旋转依赖。因此,横向框架和边界因此在iOS 7中会有所不同,但在iOS 8中也是如此。如果您使用边界而不是框架,则应该给出两个iOS版本的相同结果,因为对象未旋转某些数字的度数。