Swift:以编程方式附加自定义 UIView

Swift: Append Custom UIView programmatically

这是另一个 SO question, however I'm running into some issues that it makes it appear like I'm not doing it correctly. For reference, I followed this excellent tutorial on creating re-usable viewsnear 副本,来自自定义 class 和 xib 文件(只需几分钟 :) 我有将它拖到我的情节提要板上的另一个视图中完全没有问题(如视频末尾所示)

尽管如此,对于我的情况 — 我正在尝试以编程方式调用我的自定义 class,并将其作为子视图添加到我的 ScrollView 实例之一。

class MainController: UIViewController {

    @IBOutlet weak var scrollView: UIScrollView!
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        first.directionalLockEnabled = true
        first.pagingEnabled = true
        var item = MyCustomView(frame: CGRectMake(0, 0, self.view.frame.width, 200))
        self.scrollView.addSubview(item)
    }

}

我的自定义视图如下所示:

import UIKit

class MyCustomView: UIView {
    @IBOutlet var view: UIView!
    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var dressTitle: UILabel!
    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        NSBundle.mainBundle().loadNibNamed("MyCustomView", owner: self, options: nil)
        self.view.frame = bounds
        self.addSubview(self.view)
    }
    override init(frame: CGRect) {
        super.init(frame: frame)

    }
}

还有一个关联的 .xib 文件,其中包含标签和图像。

所以我的问题是,我的视图从未出现在我的 ScrollView 中。我已经仔细检查了我的滚动视图的约束...我什至可以附加简单的 UIView 具有明显的可见尺寸 CGRectMake(0, 0, 100, 100)... 并且什么也没有给出。我错过了什么?

由于一些混乱,我不小心通过将 loadFromNib 方法复制到 CustomView.swift 文件中的第二个初始化程序来使其工作。正如在原始问题中发布的视频教程中看到的那样,它只显示了一个初始值设定项....但在我的情况下,我不得不向 init(frame) 添加额外的代码。例如:

// once with a NSCoder
required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    NSBundle.mainBundle().loadNibNamed("Item", owner: self, options: nil)
    self.view.frame = bounds
    self.addSubview(self.view)
}

// for this to work programmatically I had to do the same...
override init(frame: CGRect) {
    super.init(frame: frame)
    NSBundle.mainBundle().loadNibNamed("Item", owner: self, options: nil)
    self.view.frame = bounds
    self.addSubview(self.view)
}