没有 NIBs,UIWindow 没有填充屏幕,iOS 7

5
我完全避免使用NIBs。我在iOS 7.1上遇到了问题,但在iOS 8.x上没有问题。
iOS 7与iOS 8之间的区别:
代码在UIResponder <UIApplicationDelegate>中如下所示:
- (void) setupViewController {
    CGRect frame = UIScreen.mainScreen.bounds;
    self.window = [[UIWindow alloc] initWithFrame:frame];
    self.window.backgroundColor = UIColor.whiteColor; // viewController's view is green
    ViewController *viewController = [[ViewController alloc] init];
    UIView *view = [[UIView alloc] initWithFrame:self.window.bounds];
    viewController.view = view;
    self.window.rootViewController = viewController;
    [self.window makeKeyAndVisible];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [self setupViewController];
    return YES;
}

我已经尝试了一些处理iOS 8的方法,但即使将 UIWindowframe 设置为 5000, 5000,也会产生相同的结果。

[我看到过许多相关的问题,并尝试了建议,但都无济于事,包括在iOS 8中翻转边界等等。]

1个回答

12

问题在于您没有适用于4英寸屏幕的启动图像,因此iPhone 5s将此应用程序视为3.5英寸应用程序(iPhone 4)并进行信封式处理。


1
启动图像在iOS 7和iOS 8上的工作方式不同,这就是问题所在。您必须同时满足两者的规则。 - matt
1
所以,仅仅将“启动图像源”切换到“资产目录”就解决了问题,正如你所建议的那样。所有的启动图像都是空白的,但它仍然可以工作。感谢你所做的一切,这真的很有帮助! - Dan Rosenstark
1
在将旧项目迁移到iOS 12时,我也遇到了同样的问题。无法使应用程序窗口全屏。只需在info.plist中添加一个空的“Launch screen interface file base name”即可解决此问题。谢谢! - Raf
@Raf 很好!你甚至找到了这个问题和答案,太棒了。 - matt

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