swift - 如何将 xib 中的自定义 View 添加到 UIScrollView?

标签 swift uiscrollview xib nib

问题

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

我将 UIScrollView 添加到 Storyboard中的空 ViewController 中。我还在 Safe Area 中添加了前导、尾随、顶部、底部 4 个约束,并将它们全部设置为 0。

现在在代码中我想将自定义 View “EquipmentInfoView”添加到现有的 UIScrollView

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

    override func viewDidLoad() {
        super.viewDidLoad()

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

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

这是自定义 View “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 创建自定义 View 的正常方法。但是,这样我就不必将文件的所有者设置为“EquipmentInfoView”,而是将 View 的自定义类设置为“EquipmentInfoView”。 (当我进行单元测试时,将文件的所有者设置为“EquipmentInfoView”会给我 EXC_BAD_ACCESS)

为了清楚起见,我将此 View 添加到普通(非滚动) View 中的方法如下:

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

最佳答案

您可能缺少 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)
    }
}

关于swift - 如何将 xib 中的自定义 View 添加到 UIScrollView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56776280/

相关文章:

ios - 如何将点击与注释匹配(或比较)?

ios - "Presenting view controllers on detached view controllers is discouraged"呈现模态时的消息

iOS 嵌套 UIScrollViews 使用 AutoLayout

view - 将XIB加载到ViewController Xamarin中?

swift - 向我的移动应用程序调用我自己的 API

ios - 如何设置背景节点的位置移动

objective-c - UIScrollView 的 subview 中的水平 UISwipeGestureRecognizer? (UIScrollView 只需要识别垂直滚动)

ios - KeyboardWillShow 中设置的执行顺序错误

ios - XIB 文件未从框架加载

ios - 是否可以从 xib 文件中为 UI 控件(例如 UIButton)设置 UIAccessibilityFrame