如果将UILabel作为LoadView()的一部分创建,与创建文件私有uilabel相比有什么区别?

问题描述 投票:0回答:1

我一直以编程方式构建我的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),


    ])

一种方法比另一种更好吗?还是更多是个人喜好。

swift xcode uikit ios-autolayout
1个回答
0
投票

loadView()和viewDidLoad()的目的与生命周期事件有关。本质上,所有事情都是按顺序发生的,某些事情必须在特定的时间发生。例如,如果您尝试在加载父视图控制器后给它一个类,那么您将遇到问题。解决方法是使用loadView()并将其添加到那里。本质上,在呈现视图之前,使您的类,函数或任何事情在加载视图时发生。

通常,当您考虑视图的外观以及相关方法时,人们会更好地理解。

viewWillAppear()

  • 通过这种方法设置视图比在事实之后进行设置要容易得多。您真的只想使用快速且不会挂断应用程序的进程来做到这一点。

viewDidAppear()

  • 在这里尝试在视图上设置某些内容需要您使用主线程并将其他所有内容传递给后台线程。

相同的生命周期概念适用于加载。还值得注意的是,您可能不应该在内置Interface Builder的任何现代应用程序上使用loadView。通常,在使用手动创建的视图时使用loadView()更为有用,因为它不会产生太大的变化,但是使用viewDidLoad()有时会带来某些挑战,尽管很少。

© www.soinside.com 2019 - 2024. All rights reserved.