You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 17:30:59