Какая разница, если я создаю UILabel как часть моего LoadView () по сравнению с созданием fileprivate uilabel? - PullRequest
0 голосов
/ 23 апреля 2020

Я всегда программно создавал свой пользовательский интерфейс, и недавно я начал больше узнавать о 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),


    ])

Это в один раз лучше, чем Другой? Или это больше личного предпочтения.

1 Ответ

0 голосов
/ 27 апреля 2020

Назначение loadView () и viewDidLoad () связано с событиями жизненного цикла. По сути, все происходит по порядку, и определенные вещи должны происходить в определенное время c. Например, если вы попытаетесь дать родительскому контроллеру представления класс после его загрузки, вы столкнетесь с проблемами. Исправление для этого заключается в использовании loadView () и добавлении его туда. По сути, создание вашего класса, функции или чего-либо еще в процессе загрузки представления перед его представлением.

Как правило, люди лучше понимают, когда вы рассматриваете, как в качестве примера отображается представление со связанными с ним методами.

viewWillAppear ()

  • Гораздо проще настроить представление в этом методе, чем настраивать его по факту. Вы действительно хотите делать это только с быстрыми процессами, которые не вешают приложение.

viewDidAppear ()

  • Попытка установить что-либо в представлении здесь требует использования основного потока и передачи всего остального в фоновый поток .

Та же концепция жизненного цикла применяется к загрузке. Стоит также отметить, что вам, вероятно, не следует использовать loadView в любых современных приложениях, встроенных в Interface Builder. Обычно более полезно использовать loadView() при работе с созданными вручную представлениями, при условии, что это не будет иметь большого значения, но использование viewDidLoad () может иногда представлять определенные проблемы, хотя и редко.

...