how can i increase the height of an inputAccessoryView
To make input accessory view grow vertically you just set its autoresizingMask = .flexibleHeight
, calculate its intrinsicContentSize
and let the framework do the rest.
The code:
class InputAccessoryView: UIView, UITextViewDelegate { let textView = UITextView() override init(frame: CGRect) { super.init(frame: frame) // This is required to make the view grow vertically self.autoresizingMask = UIView.AutoresizingMask.flexibleHeight // Setup textView as needed self.addSubview(self.textView) self.textView.translatesAutoresizingMaskIntoConstraints = false self.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[textView]|", options: [], metrics: nil, views: ["textView": self.textView])) self.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[textView]|", options: [], metrics: nil, views: ["textView": self.textView])) self.textView.delegate = self // Disabling textView scrolling prevents some undesired effects, // like incorrect contentOffset when adding new line, // and makes the textView behave similar to Apple's Messages app self.textView.isScrollEnabled = false } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } override var intrinsicContentSize: CGSize { // Calculate intrinsicContentSize that will fit all the text let textSize = self.textView.sizeThatFits(CGSize(width: self.textView.bounds.width, height: CGFloat.greatestFiniteMagnitude)) return CGSize(width: self.bounds.width, height: textSize.height) } // MARK: UITextViewDelegate func textViewDidChange(_ textView: UITextView) { // Re-calculate intrinsicContentSize when text changes self.invalidateIntrinsicContentSize() }}
Fast forward to 2020, you can just do the following, everything else the same as in maxkonovalov's answer
override var intrinsicContentSize: CGSize { return .zero}// MARK: UITextViewDelegatefunc textViewDidChange(_ textView: UITextView) { sizeToFit()}