我一直以编程方式构建我的UI,最近我开始学习有关loadView()的更多信息。我意识到当我使用loadView()时,我会这样写代码:
override func loadView() {
super.loadView()
let EarningsView = UIView()
let EarningsLabel = UILabel()
EarningsView.translatesAutoresizingMaskIntoConstraints = false
EarningsLabel.translatesAutoresizingMaskIntoConstraints = false
let earningsText = NSAttributedString(string: "My Earnings", attributes: self.stringAttrib)
EarningsLabel.attributedText = earningsText
EarningsLabel.textColor = .black
EarningsLabel.backgroundColor = .white
EarningsView.addSubview(EarningsLabel)
EarningsView.addViewBorder(borderColor: UIColor.black.cgColor, borderWith: 0.5, borderCornerRadius: 0.0)
EarningsView.backgroundColor = .white
NSLayoutConstraint.activate([
EarningsView.widthAnchor.constraint(equalTo: contentStack.widthAnchor),
EarningsView.topAnchor.constraint(equalTo: contentStack.topAnchor),
EarningsView.centerXAnchor.constraint(equalTo: contentStack.centerXAnchor),
view.addSubview(EarningsView)
}
与我一直以来的写作方式相比:
fileprivate lazy var earningsView : UIView = {
var view = UIView()
let EarningsLabel = UILabel()
EarningsLabel.translatesAutoresizingMaskIntoConstraints = false
let earningsText = NSAttributedString(string: "My Earnings", attributes: self.stringAttrib)
EarningsLabel.attributedText = earningsText
EarningsLabel.textColor = .black
EarningsLabel.backgroundColor = .white
view.addSubview(EarningsLabel)
view.addViewBorder(borderColor: UIColor.black.cgColor, borderWith: 0.5, borderCornerRadius: 0.0)
view.backgroundColor = .white
view.addSubview(EarningsLabel)
return view
}()
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(earningsView)
NSLayoutConstraint.activate([
earningsView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
earningsView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor),
earningsView.widthAnchor.constraint(equalTo: self.view.widthAnchor),
earningsView.heightAnchor.constraint(equalTo: self.view.heightAnchor,multiplier: 0.20),
])
一种方法比另一种更好吗?还是更多是个人喜好。
loadView()和viewDidLoad()的目的与生命周期事件有关。本质上,所有事情都是按顺序发生的,某些事情必须在特定的时间发生。例如,如果您尝试在加载父视图控制器后给它一个类,那么您将遇到问题。解决方法是使用loadView()并将其添加到那里。本质上,在呈现视图之前,使您的类,函数或任何事情在加载视图时发生。
通常,当您考虑视图的外观以及相关方法时,人们会更好地理解。
相同的生命周期概念适用于加载。还值得注意的是,您可能不应该在内置Interface Builder的任何现代应用程序上使用loadView。通常,在使用手动创建的视图时使用loadView()
更为有用,因为它不会产生太大的变化,但是使用viewDidLoad()有时会带来某些挑战,尽管很少。