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