iOS应用未占满屏幕求助:纯代码创建ViewController无法全屏
iOS纯代码创建应用视图无法全屏问题
我创建了一个iOS示例应用,移除了storyboard、启动屏幕(launch screen)和SceneDelegate,通过纯代码创建了一个空白的MainViewController。相关代码如下:
MainViewController:
class MainViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .green } }
AppDelegate:
import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { window = UIWindow(frame: UIScreen.main.bounds) window?.rootViewController = MainViewController() window?.makeKeyAndVisible() return true } }
Info.plist:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict/> </plist>
问题:视图无法占满整个屏幕,原本以为使用UIWindow(frame: UIScreen.main.bounds)就能实现全屏,但实际效果是绿色视图上下留有白色空白区域,没有填满整个屏幕。
解决方案
1. 适配iOS 13+的Window初始化逻辑
iOS 13及以后,UIWindow需要关联到UIWindowScene才能正确获取设备的完整屏幕尺寸,直接用UIScreen.main.bounds初始化在部分场景下会出现布局偏差。修改AppDelegate代码:
import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // 根据系统版本适配Window初始化 if #available(iOS 13.0, *) { guard let windowScene = application.connectedScenes.first as? UIWindowScene else { return true } window = UIWindow(windowScene: windowScene) } else { window = UIWindow(frame: UIScreen.main.bounds) } window?.rootViewController = MainViewController() window?.makeKeyAndVisible() return true } // iOS 13+必须实现该方法,用于配置Scene @available(iOS 13.0, *) func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) } }
2. 允许视图延伸到安全区域外
在MainViewController中设置edgesForExtendedLayout,让视图可以填满整个屏幕:
class MainViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .green // 允许视图延伸到导航栏、状态栏等安全区域之外 edgesForExtendedLayout = .all } }
3. 可选:添加空白启动屏幕(推荐)
如果没有启动屏幕,iOS可能会默认应用以兼容模式运行,导致布局限制。可以添加一个空的Launch Screen.storyboard(不需要任何内容),并在项目设置中指定为启动界面,让系统识别应用支持全屏布局。
内容的提问来源于stack exchange,提问作者Frakcool
相关产品推荐
相关产品推荐

