Дублируются ли UIView при повторном добавлении подпредставления в Swift? - PullRequest
0 голосов
/ 05 мая 2019

Мне интересно кое-что об UIView и добавлении подпредставлений ...

Итак, я добавляю подпредставление в baseLayerView следующим образом:

  self.newBaseLayer.addSubview(self.usernameLabel)

Иерархия / структура UIView будут,поправьте меня, если я ошибаюсь, например:

  • newBaseLayer

    • self.usernameLabel

А потом в коде я добавляю еще одно подпредставление:

  self.newBaseLayer.addSubview(self.dateLabel)

И, наконец, снова добавляю метку имени пользователя:

  self.newBaseLayer.addSubview(self.usernameLabel)

Будет ли дублироваться имя пользователя Labelили замените другой следующим образом:

  • newBaseLayer

    • self.usernameLabel
    • self.dateLabel
    • self.usernameLabel

или

  • newBaseLayer

    • self.dateLabel
    • self.usernameLabel

1 Ответ

4 голосов
/ 05 мая 2019

Полагаю, мы говорим о UIViews, а не Layers здесь?!

В этом случае usernameLabel добавляется только один раз, даже если вы вызываете addSubview несколько раз.

Чтобы избежать двусмысленности, здесь приведен код:

let baseView = UIView()
let dateLabel = UILabel()
let usernameLabel = UILabel()

override func viewDidLoad() {
    super.viewDidLoad()

    baseView.tag = 1
    usernameLabel.tag = 2
    dateLabel.tag = 3

    self.view.addSubview(self.baseView)

    self.baseView.addSubview(self.usernameLabel)
    self.baseView.addSubview(self.dateLabel)
    self.baseView.addSubview(self.usernameLabel)

    self.traverseViewHierarchy(view: self.baseView, level: 0)

}

private func traverseViewHierarchy(view: UIView, level: Int) {
    for _ in 0...level {
        print (" | ", terminator: "")
    }
    print ("view: \(view.tag)")
    for view in view.subviews {
        self.traverseViewHierarchy(view: view, level: level + 1)
    }
}

Это добавляет некоторые теги к видам упоминаний и выдает их в консоли:

| view: 1
|  | view: 3
|  | view: 2

Как видите, usernameLabel просто добавляется один раз в иерархию представлений.

...