我使用的是一个使用以下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宽度应该始终是它显示的窗口的宽度。