如何将自定义视图从xib添加到UIScrollView?

时间:2019-06-26 15:25:48

标签: swift uiscrollview xib nib

问题

我正在尝试将xib中的自定义视图添加到UIScrollView中。

我将UIScrollView添加到了故事板上的空ViewController中。我还为安全区域添加了4个约束,分别用于前导,尾随,顶部,底部,并将它们全部设置为0。

现在在代码中,我想向现有的UIScrollView添加自定义视图“ EquipmentInfoView”

class EquipmentInfoVC: UIViewController {
    @IBOutlet var scrollView: UIScrollView!

    override func viewDidLoad() {
        super.viewDidLoad()

        equipmentInfoView = EquipmentInfoView.instantiate()
        scrollView.addSubview(equipmentInfoView)
    }
}

它不起作用,因为ScrollView不滚动。我应该怎么做呢?

这是自定义视图“ EquipmentInfoView”

class EquipmentInfoView: UIView {

    @IBOutlet var nameTextView: UITextView!
    @IBOutlet var descriptionTextView: UITextView!
    @IBOutlet var equipmentImageView: UIImageView!

    static func instantiate() -> EquipmentInfoView {
        let view: EquipmentInfoView = initFromNib()
        return view
    }
}

附加说明

我知道这不是从xib创建自定义视图的正常方法。但是,通过这种方式,我不必将文件的所有者设置为“ EquipmentInfoView”,而是将视图的自定义类设置为“ EquipmentInfoView”。 (在进行单元测试时,将文件的所有者设置为“ EquipmentInfoView”会给我EXC_BAD_ACCESS)

为清楚起见,这是将视图添加到普通(非滚动)视图的方法:

equipmentInfoView = EquipmentInfoView.instantiate()
mainView.addSubview(equipmentInfoView)
equipmentInfoView.frame = mainView.bounds
equipmentInfoView.autoresizingMask = [.flexibleHeight, .flexibleWidth]

1 个答案:

答案 0 :(得分:0)

您可能缺少scrollView的contentSize

class EquipmentInfoVC: UIViewController {
    @IBOutlet var scrollView: UIScrollView!

    override func viewDidLoad() {
        super.viewDidLoad()

        equipmentInfoView = EquipmentInfoView.instantiate()
        scrollView.contentSize = equipmentInfoView.frame.size
        scrollView.addSubview(equipmentInfoView)
    }
}