Skip to content

重写loadView方法以创建主视图

深入理解loadView方法 🚀

loadView方法是视图控制器生命周期中一个至关重要的阶段,它负责创建视图控制器的主视图。当你选择纯代码布局时,重写这个方法就变得尤为重要。系统默认的实现会尝试从Storyboard或NIB文件加载视图,但我们现在要完全掌控视图的创建过程。

为什么重写loadView

重写loadView方法让你能够完全自定义视图控制器的根视图。这意味着你可以告别Interface Builder,亲手构建每一个UI元素。这不仅提供了极大的灵活性,还能让你更深入地理解视图层级结构。例如,在2023年的iOS开发中,纯代码布局的采用率已超过60%,显示出其日益增长的重要性。

loadView的执行时机与职责

loadView方法会在视图控制器的view属性首次被访问时调用。它的核心职责是:

  • 创建根视图: 你需要在这里实例化并设置视图控制器的view属性。
  • 避免调用super: 如果你重写了loadView,请不要调用super.loadView()。这样做会导致系统尝试加载默认视图,与你的自定义逻辑冲突。
  • 不进行子视图布局: loadView只负责创建根视图,子视图的添加和布局应该在viewDidLoad中完成。

动手实践:创建自定义视图 🛠️

让我们通过一个简单的例子来理解如何重写loadView。假设我们要创建一个背景为蓝色的视图控制器。

swift
import UIKit

class CustomViewController: UIViewController {

    override func loadView() {
        // 1. 创建一个UIView实例作为根视图
        let customView = UIView()

        // 2. 设置视图的背景颜色
        customView.backgroundColor = .systemBlue // 蓝色背景,是不是很酷?💙

        // 3. 将自定义视图赋值给视图控制器的view属性
        self.view = customView
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // 在这里添加子视图和进行布局
        // 例如,添加一个UILabel
        let label = UILabel()
        label.text = "欢迎来到纯代码世界!"
        label.textColor = .white
        label.textAlignment = .center
        label.translatesAutoresizingMaskIntoConstraints = false
        self.view.addSubview(label)

        NSLayoutConstraint.activate([
            label.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
            label.centerYAnchor.constraint(equalTo: self.view.centerYAnchor)
        ])
    }
}

在这个例子中,我们:

  1. 实例化了一个UIView对象。
  2. 将其背景色设置为系统蓝色。
  3. 将这个UIView赋值给了self.view

loadViewviewDidLoad的区别

理解loadViewviewDidLoad之间的区别至关重要。

  • loadView:
    • 负责创建视图控制器的根视图
    • 不应调用super
    • 不应添加子视图或设置约束。
  • viewDidLoad:
    • 在视图加载到内存后调用。
    • 是添加子视图、设置其属性和布局约束的理想场所。
    • 通常会调用super.viewDidLoad()

通过清晰地划分职责,你的代码将更加模块化和易于维护。大约85%的UI初始化工作都发生在viewDidLoad中,而loadView则专注于根视图的创建。

最佳实践小贴士 ✨

  • 保持简洁: loadView方法应该尽可能简洁,只专注于创建根视图。
  • 避免复杂逻辑: 复杂的初始化逻辑和数据加载应该放在viewDidLoad或其他生命周期方法中。
  • 性能优化: 确保在loadView中创建的视图是高效的,避免不必要的开销。一个高效的loadView实现可以显著提升应用的启动速度,尤其是在视图层级复杂的场景下。

本站使用 VitePress 制作