Swift启动屏幕Label文本修改问题:首次显示Welcome,后续显示Hello
问题分析与解决方案
首先明确:iOS的Launch Screen(启动屏)是静态资源,编译阶段就被打包成静态快照,运行时无法动态修改其中的控件内容。你之前添加的Label是在LaunchScreen.storyboard或LaunchScreen.xib文件里定义的,但这个文件里的内容无法在运行时调整,这就是你找不到修改方法的核心原因。
要实现“首次打开显示Welcome,后续显示Hello”的需求,需要换用以下可行思路:
替代方案:用过渡页面模拟动态启动效果
创建一个和Launch Screen布局完全一致的过渡ViewController(命名为SplashViewController),通过这个页面实现动态文本切换,步骤如下:
- 在Xcode中新建SplashViewController,复刻Launch Screen的所有布局,给Label添加IBOutlet绑定(命名比如
welcomeLabel)
- 在Xcode中新建SplashViewController,复刻Launch Screen的所有布局,给Label添加IBOutlet绑定(命名比如
- 在AppDelegate或SceneDelegate中,将SplashViewController设为应用启动后的第一个根控制器
- 用
UserDefaults存储用户是否是首次打开的标记:读取UserDefaults.standard.bool(forKey: "isFirstLaunch"),首次打开时该值默认是false
- 用
- 根据标记设置Label文本:首次打开设为
Welcome,否则设为Hello
- 根据标记设置Label文本:首次打开设为
- 首次打开后,更新标记:
UserDefaults.standard.set(true, forKey: "isFirstLaunch")
- 首次打开后,更新标记:
- 延迟1-2秒后,跳转到应用的主页面或登录页面
示例代码(放在SplashViewController的viewDidLoad中):
override func viewDidLoad() { super.viewDidLoad() let isFirstLaunch = !UserDefaults.standard.bool(forKey: "isFirstLaunch") welcomeLabel.text = isFirstLaunch ? "Welcome" : "Hello" if isFirstLaunch { UserDefaults.standard.set(true, forKey: "isFirstLaunch") } // 延迟跳转主页面 DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) { let mainVC = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController()! UIApplication.shared.windows.first?.rootViewController = mainVC } }
找到你之前添加的Label
你之前添加的Label肯定在项目的LaunchScreen.storyboard或LaunchScreen.xib文件里,在Xcode的项目导航栏中找到这个文件并打开,就能看到对应的Label,但记住它只能用于静态展示,无法在运行时修改。
内容的提问来源于stack exchange,提问作者Enes Sancar
相关产品推荐
相关产品推荐

