使用init(重复:count)创建的视图上的Swift addSubview()不起作用
问题描述:
这是一个使用init(重复:count)创建4个子视图的ViewController。使用init(重复:count)创建的视图上的Swift addSubview()不起作用
在viewDidLoad中,我将它们添加为子视图并设置其框架。当我运行应用程序时,只会添加最后一个视图。
class ViewController: UIViewController {
let subviews = [UIView].init(repeating: UIView(), count: 4)
override func viewDidLoad() {
super.viewDidLoad()
for i in 0..<subviews.count {
self.view.addSubview(subviews[i])
self.subviews[i].backgroundColor = UIColor.red
self.subviews[i].frame = CGRect(x: CGFloat(i) * 35, y: 30, width: 30, height: 30)
}
}
}
下面是相同的代码只是不使用的init(重复:计数)我使用
的封闭件。这工作正常 - 所有子视图都被添加。
class ViewController: UIViewController {
let subviews: [UIView] = {
var subviews = [UIView]()
for i in 0..<4 {
subviews.append(UIView())
}
return subviews
}()
override func viewDidLoad() {
//same as above...
}
}
答
你放UIView
相同的实例您的阵列四次英寸你的viewDidLoad
只是最终移动那个单一的视图。您需要创建四个不同的UIView
实例。
let subviews = (0 ..< 4).map({ _ in UIView() })
谢谢!你发现我的错误。我认为你也可以去掉地图闭合上的外部圆括号。 – MH175
你可以但我不喜欢在这种情况下。 –