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

时间:2019-05-05 18:03:55

标签: ios swift uiview subview addsubview

我想知道有关UIView的信息,并添加子视图...

所以说我这样将一个子视图添加到baseLayerView中:

  self.newBaseLayer.addSubview(self.usernameLabel)

如果我错了,UIView层次结构/结构将纠正我,就像这样:

  
      
  • 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
    •   
  •   

1 个答案:

答案 0 :(得分:4)

我想我们在谈论的是UIView,而不是此处的Layers !!

在这种情况下,即使多次调用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仅添加到视图层次结构一次。