簡體   English   中英

將視圖用作 inputAccessoryView 時如何防止鍵盤添加自己的高度約束

[英]How do I prevent Keyboard from adding its own height constraint when using view as inputAccessoryView

由於各種原因,我嘗試使用自定義視圖作為鍵盤上的輔助視圖,在這種情況下,由於其他一些功能,它比手動鍵盤對齊更受歡迎。

不幸的是,這是一個定義其自身高度的動態視圖。 約束在附件視圖的上下文之外都可以正常工作,沒有錯誤,並且可以正確調整大小

當添加為keyboardAccessoryView時,它似乎會強加當時框架的高度並打破其他高度限制

它顯示為:

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

(其中0對應於初始化時使用的任何高度

它也被標記為accessoryHeight應該可以很容易地刪除它,但不幸的是,在我能做到這一點之前,我得到了無法滿足的約束並且系統正在拋出我的高度約束

試過:

inputAccessoryView覆蓋中,我嘗試檢查約束並將其刪除,但此時它不存在

設置translatesAutoresizing...Constraints = false

tl;博士

使用視圖作為 KeyboardAccessoryView 是在事后添加自己的高度約束,我可以刪除它嗎?

看起來鍵盤不喜歡帶有高度限制的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()
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM