UIView以编程方式添加了全屏错误的大小

在我详细介绍之前,我想提一下,我已经尝试了关于添加LaunchImages / LaunchScreen.xib等的所有教程,而这些都不适合我。 也许我做错了什么,所以请让我知道,如果你认为我错过了什么。

所以我的大部分视图都是使用界面生成器/自动布局创build的,它们可以扩展到所有模拟器,iPhone 4s-iPhone 6s plus的正确尺寸。

但是,对于我的观点之一,我做了一点不同的事情,似乎停留在iPhone 4S的屏幕大小,无论我运行哪个模拟器。 (也就是说在视图周围有空白区域)

这就是我所做的:

我有一个CustomView.XIB,并添加了一堆使用AutoLayout的button/标签/等。

我也做CustomView.h和.m文件:

- (instancetype)initWithNib { self = [super initWithFrame:[[UIScreen mainScreen] bounds]]; if (self) { NSLog(@"Screen bounds height in view: %f",[UIScreen mainScreen].bounds.size.height); NSBundle *bundle = [NSBundle bundleForClass:[self class]]; UINib *nib = [UINib nibWithNibName:@"CustomView" bundle:bundle]; CustomView *view = [nib instantiateWithOwner:self options:nil][0]; [self addSubview:view]; } return self; } 

并在我的CustomViewController.m文件中我有:

 currentCustomView = [[CustomView alloc] initWithNib]; [self.view addSubview:currentCustomView]; 

所以实际上我不认为[[UIScreen mainScreen]边界]是错误的。 CustomViewController和CustomView都返回相同的不正确的边界。 为什么ViewController的边界不正确? 为什么总是iPhone 4的界限,而不是用不同的模拟器改变?

我有我的图像资源启动图像:

启动图片资源

在属性部分:

属性部分

另一个问题:如果我只支持IOS 9及以上版本,在我看来,我不需要iOS 6和之前的启动图像。 但是,那么它将无法在一些模拟器版本上正常工作。 但是我认为所有的iPhone 4s-6s都可以支持iOS9,所以他们为什么要这样设置呢?

只是想了两天后,如何做到这一点,尝试不同的事情。

对于读这个的人来说,甚至不用担心启动图像和所有爵士乐。 只需使用AutoLayout,它会在你的视图控制器中为你缩放视图。 我只需要做:

[view setTranslatesAutoresizingMaskIntoConstraints:NO];

然后是我想要的NSLayoutConstraints。 但关键是我需要为CustomViewController和我的CustomView中添加子视图后这样做。 看看我上面的代码,看看为什么我需要这样做。