在 Swift 中再次添加子视图时,UIView 是否重复?

Are UIViews duplicated when adding a subview again in Swift?

我对 UIView 和添加子视图感到疑惑...

假设我将子视图添加到 baseLayerView 中:

  self.newBaseLayer.addSubview(self.usernameLabel)

UIView hierarchy/structure 会,如果我错了请纠正我,像这样:

  • newBaseLayer

    • self.usernameLabel

然后在代码的后面,我添加了另一个子视图:

  self.newBaseLayer.addSubview(self.dateLabel)

最后我再次添加用户名标签:

  self.newBaseLayer.addSubview(self.usernameLabel)

usernameLabel 会重复或替换另一个吗:

  • newBaseLayer

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

  • newBaseLayer

    • self.dateLabel
    • self.usernameLabel

我想我们在这里谈论的是 UIView 而不是图层?!

在这种情况下,即使您多次调用 addSubview,也只会添加一次 usernameLabel。

为了避免这里出现歧义,一些代码:

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 仅添加到视图层次结构中一次。