【问题标题】:How do I prevent Keyboard from adding its own height constraint when using view as inputAccessoryView将视图用作 inputAccessoryView 时如何防止键盘添加自己的高度约束
【发布时间】:2021-02-11 16:25:28
【问题描述】:

出于各种原因,我尝试使用自定义视图作为键盘的辅助视图,在这种情况下,由于其他一些功能,它比手动键盘对齐更受欢迎。

不幸的是,这是一个定义其自身高度的动态视图。约束在附件视图的上下文之外都可以正常工作,没有错误,并且可以正确调整大小

当添加为keyboardAccessoryView时,它似乎会强加当时框架的高度并打破其他高度限制

它显示为:

"<NSLayoutConstraint:0x600003e682d0 '_UIKBAutolayoutHeightConstraint' Turntable.ChatInput:0x7fb629c15050.height == 0   (active)>"

(其中0 将对应于初始化时使用的任何高度

它也被标记为accessoryHeight,应该可以很容易地删除它,但不幸的是,在我能做到这一点之前,我遇到了无法满足的约束并且系统正在折腾我的身高限制

试过了:

inputAccessoryView 覆盖中,我尝试检查约束并将其删除,但此时它不存在

设置translatesAutoresizing...Constraints = false

tl;dr

使用视图作为 KeyboardAccessoryView 在事后添加了自己的高度约束,我可以删除它吗?

【问题讨论】:

    标签: ios swift uikit


    【解决方案1】:

    看起来键盘不喜欢带有高度限制的inputAccessoryView。但是,您仍然可以通过使用 frame 使 inputAccessoryView 具有动态高度(仍然可以在您的自定义 inputAccessoryView 中使用约束内部)。

    请检查这个例子:

    import UIKit
    
    final class ViewController: UIViewController {
    
        private let textField: UITextField = {
            let view = UITextField()
            view.frame = .init(x: 100, y: 100, width: 200, height: 40)
            view.borderStyle = .line
            return view
        }()
    
        private let customView: UIView = {
            let view = UIView()
            view.backgroundColor = .red
            view.frame.size.height = 100
            view.autoresizingMask = .flexibleHeight // without this line height won't change
            return view
        }()
    
        override func viewDidLoad() {
            super.viewDidLoad()
            view.addSubview(textField)
            textField.inputAccessoryView = customView
            textField.becomeFirstResponder()
    
            DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
                self.customView.frame.size.height = 50
                self.textField.reloadInputViews()
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-11
      • 1970-01-01
      • 2015-02-27
      • 2014-11-27
      • 1970-01-01
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多