我正在使用UIPickerView
在我的应用上迁移我的应用。在viewDidLoad方法中,我创建了选择器,并将它的y原点设置为self.view.frame.size.height
,以便它在屏幕外。然后我会在需要时将其移动。
在iPhone 5 self.view.frame.size.height
仍然返回480但UIView
正确填充屏幕。
我甚至尝试使用CGRectGetHeight(self.view.bounds)
认为它可能会返回不同的东西......没有骰子。关于为什么会发生这种情况的任何想法。
答案 0 :(得分:22)
这是因为在viewWillAppear: (BOOL) animated
方法之前将使用您在视图笔尖中选择的大小。然后它将采取正确的大小。
但是,您可以使用以下代码来调整viewDidLoad
之后的正确大小:
CGSize viewSize = [[UIScreen mainScreen] bounds].size;
viewSize = CGSizeMake(viewSize.width, viewSize.height - STATUS_BAR_HEIGHT);
STATUS_BAR_HEIGHT
是20,但这取决于您的应用。您可能需要也可能不需要添加该行。
修改强>
使用mainScreen
边界的问题在于框架在方向更改时不会发生变化。这就是它的设计方式。您可以使用以下方法解决这个问题:
CGSize viewSize = [[UIScreen mainScreen] bounds].size;
if(UIInterfaceOrientationIsLandscape(CURRENT_ORIENTATION)){
viewSize = CGSizeMake(viewSize.height, viewSize.width - STATUS_BAR_HEIGHT);
} else {
viewSize = CGSizeMake(viewSize.width, viewSize.height - STATUS_BAR_HEIGHT);
}
CURRENT_ORIENTATION
是[[UIApplication sharedApplication] statusBarOrientation];
答案 1 :(得分:18)
我一直在处理同样的问题。我尝试在- (void)viewDidLoad
中获取视图框,但发现在- (void)viewWillAppear:(BOOL)animated
被调用之前它没有更新。
所以尝试在- (void)viewWillAppear:(BOOL)animated
中获取视图框架,你应该没问题。
答案 2 :(得分:3)
看起来iOS检测到应用程序是专为在iPhone 5中检测到捆绑中的Default-568h@2x.png图像而设计的。 How to develop or migrate apps for iPhone 5 screen resolution?有一个完整的答案,概述了整个过程。
答案 3 :(得分:1)
我发现了这个问题。我的笔尖必须设置为“iPhone 5全屏”(我认为这就是所谓的)。我猜它会从笔尖加载视图大小而不考虑autoResizeMask。
当IB中的视图大小设置为“大小:无”时,视图的大小不正确。它必须设置为“尺寸:Retina 4全屏”。奇怪。