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

ali*_*ego 8 xcode xib ios inputaccessoryview swift

我正在使用一个inputAccessoryView,它使用以下UIView子类从一个nib加载:

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
    }

}
Run Code Online (Sandbox Code Playgroud)

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

var customInputAccessoryView = CustomInputAccessoryView()
Run Code Online (Sandbox Code Playgroud)

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

<_UIKBCompatInputView: ...; frame = (0 0; 0 0); layer = <CALayer: ...>> returned 0 width, assuming UIViewNoIntrinsicMetric
Run Code Online (Sandbox Code Playgroud)

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

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

inputAccessoryView宽度应始终为其显示的窗口的宽度.