自定义inputAccessoryView作为来自nib的UIView给出错误:返回0宽度,假设UIViewNoIntrinsicMetric

时间:2018-05-29 09:38:12

标签: ios swift xcode xib inputaccessoryview

我使用的是一个使用以下UIView子类从nib加载的inputAccessoryView:

class CustomInputAccessoryView: UIView {

    @IBOutlet var containerView: UIView!
    @IBOutlet var contentView: UIView!
    @IBOutlet weak var button1: UIButton!
    @IBOutlet weak var button2: UIButton!
    @IBOutlet weak var textView: UITextView!        

    override var intrinsicContentSize: CGSize {
        return CGSize.zero
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        setupInputAccessoryView()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setupInputAccessoryView()
    }

    func setupInputAccessoryView() {
        self.translatesAutoresizingMaskIntoConstraints = false
        Bundle.main.loadNibNamed("CustomInputAccessoryView", owner: self, options: nil)
        addSubview(containerView)
        containerView.frame = self.bounds
    }

}

我将视图分配给inputAccessoryView并通过以下方式进行设置:

var customInputAccessoryView = CustomInputAccessoryView()

inputAccessoryView正确加载并正确显示。问题是,当我按下inputAccessoryView的textView并显示键盘时,我收到以下错误:

<_UIKBCompatInputView: ...; frame = (0 0; 0 0); layer = <CALayer: ...>> returned 0 width, assuming UIViewNoIntrinsicMetric

我有两个文件,一个.swift文件,它是上面显示的UIView的子类,同名的nib文件。在笔尖的文件所有者中,我选择子类(CustomInputAccessoryView)并连接出口。

我不知道发生了什么,除了输入附件视图可能会在显示键盘之前自动调整到零帧,然后再转到正确的大小。如果是这样,我假设我需要更改一些AutoLayout优先级,但我尝试过的是不起作用。唯一的硬宽度约束是具有固定宽度的按钮。

inputAccessoryView宽度应该始终是它显示的窗口的宽度。

0 个答案:

没有答案