新设备的 UIWindow 无法填满屏幕?

问题描述 投票:0回答:3

我正在处理一个大约有 7/8 年历史的旧 Xcode 项目,我已将其迁移到 Objective-C 2.0 并支持 ARC。在我参与该项目之前,该项目不支持自动布局(这是在它发布之前)。我已经设法解决了在更现代的 Xcode IDE (10.2.1) 中运行它时遇到的许多错误/问题。出于测试目的,我已将此代码实现到

AppDelegate
:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

self.window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, UIScreen.mainScreen.bounds.size.width, UIScreen.mainScreen.bounds.size.height)];
[self.window setBackgroundColor:[UIColor redColor]];

self.window.rootViewController = [UIViewController new];
[self.window makeKeyAndVisible];

return YES;
}

出于某种原因给了我这个:

这是我在 iPhone X、iPhone XR 或 iPhone XS Max 上运行时的结果,看起来屏幕的顶部和底部边缘(安全区域)没有被拾取。当我调试视图层次结构时,它们都没有被拾取,它只显示红色空间?当我将此代码放入新项目中时,它工作正常并填满了所有空间。我想知道因为这是一个旧项目,所以可能有一个构建设置限制

UIWindow
扩展以允许支持新设备?

另外,作为旁注,我已确保

UIWindow
对象不会在其他地方被操纵。

ios objective-c xcode appdelegate uiwindow
3个回答
22
投票

尝试将“启动屏幕界面文件基本名称”(

UILaunchStoryboardName
)添加到您的Info.plist

该键的存在似乎告诉系统您本身支持新的设备类型和尺寸类别,因此您的窗口可以填充所有可用区域。


1
投票

不要弄乱故事板。

UILaunchScreen
字典条目添加到您的 .plist 中。 包含
UIColorName
字符串值以及在
Assets.xcassets
中定义的背景颜色名称。

    <key>UILaunchScreen</key>
    <dict>
        <key>UIColorName</key>
        <string>launchScreenBackground</string>
    </dict>

0
投票

还有一个专门用于自动生成空启动屏幕的设置:

INFOPLIST_KEY_UILaunchScreen_Generation
(如果您不想执行任何自定义操作)。

https://developer.apple.com/documentation/xcode/build-settings-reference#Launch-Screen-Generation

© www.soinside.com 2019 - 2024. All rights reserved.