使用init(重复:计数)创建的视图上的Swift addSubview()不起作用

时间:2017-07-03 23:57:07

标签: ios swift initialization

这是一个使用init创建4个子视图的ViewController(重复:计数)。

在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(repeating:count) only adds last view

这是相同的代码,除了使用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...
    }
}

init closure OK

1 个答案:

答案 0 :(得分:3)

您已在阵列中放置了相同的UIView实例四次。您的viewDidLoad最终会移动该单一视图。您需要创建UIView的四个单独实例。

let subviews = (0 ..< 4).map({ _ in UIView() })