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

Swift Playground中视图控制器loadView代码多次执行问题求助

异常成因

你代码里的loadView没有完成核心职责:给当前控制器的self.view属性赋值。
UIKit的loadView生命周期方法的作用就是初始化控制器的根视图,当UIKit检测到控制器的view属性始终为nil时,就会反复触发loadView调用尝试获取有效根视图,这就是你观察到代码段多次执行的根本原因。
另外你当前的视图层级逻辑也有问题:你创建了背景UIImageView之后,没有把它加到根视图的层级上,反而把空白的局部view插到了背景图的子视图层级,就算解决了重复调用问题也无法正常显示背景。

修复方案

修正loadView中的逻辑:先给self.view赋值,再把背景图作为子视图加到根视图上即可,修正后的代码如下:

import UIKit
import PlaygroundSupport

final class MyViewController: UIViewController {
    
    override func loadView() {
        // 1. 初始化根视图并赋值给self.view
        let rootView = UIView(frame: UIScreen.main.bounds)
        self.view = rootView
        
        // 2. 添加背景图到根视图
        let backgroundImageView = UIImageView(frame: rootView.bounds)
        backgroundImageView.image = UIImage(named:"Photo.png")
        backgroundImageView.contentMode = .scaleAspectFill
        rootView.addSubview(backgroundImageView)
        // 后续可以继续添加按钮等控件,直接加到rootView上就会显示在背景之上
    }    
}

PlaygroundPage.current.needsIndefiniteExecution = true
PlaygroundPage.current.liveView = MyViewController()

修改后loadView只会执行一次,背景也可以正常渲染。


内容的提问来源于stack exchange,提问作者user16854458

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:45:03