iPhone 5上UIView的高度不正确

13

我正在迁移我的应用程序,在其中一个应用中我使用了UIPickerView。在viewDidLoad方法中,我创建了picker并将其y坐标设置为self.view.frame.size.height,以使其超出屏幕。然后当需要时,我只需将其向上移动。

在iPhone 5上,self.view.frame.size.height仍然返回480,但UIView正确地填充了屏幕。

我甚至尝试使用CGRectGetHeight(self.view.bounds),以为它可能会返回不同的值...但是没成功。有任何想法为什么会发生这种情况。


2
将一个 640x1136 像素的 Default-568h@2x.png 文件添加到您的项目中。如果没有它,您的应用程序在新设备上将无法完全拉伸到高度。更多信息请参见此处 - Filip Radelic
其他视图是否显示全屏?您是否记得将 iPhone 5 的屏幕截图添加到目标中? - Moshe Gottlieb
是的,我已经将新的默认图像放在那里了。我找到了问题所在。我的nib必须设置为“iPhone 5全屏”(我想这就是它的名字)。我猜它从nib中加载视图大小,并不考虑autoResizeMask。 - random
这不会有任何影响,视图控制器的视图的大小是基于它被添加到的位置而确定的,并且不是在viewWillAppear之前。nib设置仅用于在Interface Builder中进行预览,这就是为什么它位于“模拟指标”下面。 - Filip Radelic
4个回答

22

这是因为视图nib中选择的大小将在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];


18

我一直在处理同样的问题。我尝试在- (void)viewDidLoad中获取视图框架,但发现它在调用- (void)viewWillAppear:(BOOL)animated之前不会更新。

因此,请尝试在- (void)viewWillAppear:(BOOL)animated中获取视图框架,那么您应该就没问题了。


2
这很棒!然而,我不想每次视图即将出现时都去改变它。它只需要在视图加载后改变一次。嗯...我们一定可以找到其他解决方案(也许是不同的方法?)。 - Joe D'Andrea
@JoeD'Andrea 我有同样的问题,我认为最快的解决方法是在viewWillAppear方法中添加一个isFirstLoad标志。 - htafoya
@JoeD'Andrea 你也可以使用[[UIScreen mainScreen] bounds].size,这样就可以工作了。 - htafoya

3

1
我找到了问题所在。我的nib必须设置为“iPhone 5全屏”(我想这就是它的名称)。我猜它从nib中加载视图大小,而不考虑autoResizeMask。
当IB中的视图大小设置为“大小:无”时,视图的大小不正确。它必须设置为“大小:Retina 4全屏”。奇怪。

但是如果你这样做,并在 iPhone 4 上运行应用程序,你将得到不正确的视图高度,因为你获取的是 iPhone 5 视图的高度。 - BObereder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接