我正在处理一个大约有 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
对象不会在其他地方被操纵。
尝试将“启动屏幕界面文件基本名称”(
UILaunchStoryboardName
)添加到您的Info.plist
该键的存在似乎告诉系统您本身支持新的设备类型和尺寸类别,因此您的窗口可以填充所有可用区域。
不要弄乱故事板。
将
UILaunchScreen
字典条目添加到您的 .plist 中。
包含 UIColorName
字符串值以及在 Assets.xcassets
中定义的背景颜色名称。
<key>UILaunchScreen</key>
<dict>
<key>UIColorName</key>
<string>launchScreenBackground</string>
</dict>
还有一个专门用于自动生成空启动屏幕的设置:
INFOPLIST_KEY_UILaunchScreen_Generation
(如果您不想执行任何自定义操作)。
https://developer.apple.com/documentation/xcode/build-settings-reference#Launch-Screen-Generation