无法同时满足键盘和 UIToolBar 的约束
Unable to simultaneously satisfy constraints with keyboard and UIToolBar
我有 table 视图,下面是文本视图。我在键盘上方添加了一个工具栏来显示完成按钮。当我连续点击一个按钮删除该行时,它显示 LayoutConstraints 问题,如下所示。下面的日志也显示了事件的流程。
我可以确认这个问题与工具栏有关,如果我删除工具栏则不会出现这个问题。
https://github.com/hackiftekhar/IQKeyboardManager/issues/1616 上讨论了类似的问题
我从那里尝试了一些建议,即
禁用文本视图的自动更正 -> 对我不起作用
使用此代码创建对我不起作用的工具栏
let toolBar = UIToolbar(frame: CGRect(origin: .zero, size: CGSize(width: UIScreen.main.bounds.size.width, height: 44.0)))
任何修复?
textViewShouldBeginEditing
textViewDidBeginEditing
deleteButtonTapped
textViewDidEndEditing
textViewShouldBeginEditing
[LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<NSLayoutConstraint:0x280c45f90 'accessoryView.bottom' _UIRemoteKeyboardPlaceholderView:0x10df221b0.bottom == _UIKBCompatInputView:0x10f819ff0.top (active)>",
"<NSLayoutConstraint:0x280c66cb0 'assistantHeight' TUISystemInputAssistantView:0x10aa64390.height == 45 (active)>",
"<NSLayoutConstraint:0x280c44500 'assistantView.bottom' TUISystemInputAssistantView:0x10aa64390.bottom == _UIKBCompatInputView:0x10f819ff0.top (active)>",
"<NSLayoutConstraint:0x280c444b0 'assistantView.top' V:[_UIRemoteKeyboardPlaceholderView:0x10df221b0]-(0)-[TUISystemInputAssistantView:0x10aa64390] (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x280c444b0 'assistantView.top' V:[_UIRemoteKeyboardPlaceholderView:0x10df221b0]-(0)-[TUISystemInputAssistantView:0x10aa64390] (active)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
textViewDidBeginEditing
textViewDidEndEditing
添加完成按钮的代码。
override func viewDidLoad() {
super.viewDidLoad()
//...
self.textView.addDoneButton(title: "Done", target: self, selector: #selector(tapDone(sender:)))
}
extension UITextView {
// Add done button above keyboard
func addDoneButton(title: String, target: Any, selector: Selector) {
let toolBar = UIToolbar(frame: CGRect(x: 0.0,
y: 0.0,
width: UIScreen.main.bounds.size.width,
height: 44.0))
toolBar.backgroundColor = .toolBarBackground
let flexible = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
let barButton = UIBarButtonItem(title: title, style: .plain, target: target, action: selector)
barButton.setTitleTextAttributes([NSAttributedString.Key.font : UIFont.bodyBold, NSAttributedString.Key.foregroundColor : UIColor.purpleColour], for: [])
toolBar.setItems([flexible, barButton], animated: false)
self.inputAccessoryView = toolBar
}
}
这是 Apple 的错误,不是你的。忽略它。这是一个普遍的 "issue" 但对此无能为力;没有记录到视觉伤害。这只是一个烦人的控制台转储。
我有 table 视图,下面是文本视图。我在键盘上方添加了一个工具栏来显示完成按钮。当我连续点击一个按钮删除该行时,它显示 LayoutConstraints 问题,如下所示。下面的日志也显示了事件的流程。
我可以确认这个问题与工具栏有关,如果我删除工具栏则不会出现这个问题。
https://github.com/hackiftekhar/IQKeyboardManager/issues/1616 上讨论了类似的问题 我从那里尝试了一些建议,即
禁用文本视图的自动更正 -> 对我不起作用
使用此代码创建对我不起作用的工具栏
let toolBar = UIToolbar(frame: CGRect(origin: .zero, size: CGSize(width: UIScreen.main.bounds.size.width, height: 44.0)))
任何修复?
textViewShouldBeginEditing
textViewDidBeginEditing
deleteButtonTapped
textViewDidEndEditing
textViewShouldBeginEditing
[LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<NSLayoutConstraint:0x280c45f90 'accessoryView.bottom' _UIRemoteKeyboardPlaceholderView:0x10df221b0.bottom == _UIKBCompatInputView:0x10f819ff0.top (active)>",
"<NSLayoutConstraint:0x280c66cb0 'assistantHeight' TUISystemInputAssistantView:0x10aa64390.height == 45 (active)>",
"<NSLayoutConstraint:0x280c44500 'assistantView.bottom' TUISystemInputAssistantView:0x10aa64390.bottom == _UIKBCompatInputView:0x10f819ff0.top (active)>",
"<NSLayoutConstraint:0x280c444b0 'assistantView.top' V:[_UIRemoteKeyboardPlaceholderView:0x10df221b0]-(0)-[TUISystemInputAssistantView:0x10aa64390] (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x280c444b0 'assistantView.top' V:[_UIRemoteKeyboardPlaceholderView:0x10df221b0]-(0)-[TUISystemInputAssistantView:0x10aa64390] (active)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
textViewDidBeginEditing
textViewDidEndEditing
添加完成按钮的代码。
override func viewDidLoad() {
super.viewDidLoad()
//...
self.textView.addDoneButton(title: "Done", target: self, selector: #selector(tapDone(sender:)))
}
extension UITextView {
// Add done button above keyboard
func addDoneButton(title: String, target: Any, selector: Selector) {
let toolBar = UIToolbar(frame: CGRect(x: 0.0,
y: 0.0,
width: UIScreen.main.bounds.size.width,
height: 44.0))
toolBar.backgroundColor = .toolBarBackground
let flexible = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
let barButton = UIBarButtonItem(title: title, style: .plain, target: target, action: selector)
barButton.setTitleTextAttributes([NSAttributedString.Key.font : UIFont.bodyBold, NSAttributedString.Key.foregroundColor : UIColor.purpleColour], for: [])
toolBar.setItems([flexible, barButton], animated: false)
self.inputAccessoryView = toolBar
}
}
这是 Apple 的错误,不是你的。忽略它。这是一个普遍的 "issue" 但对此无能为力;没有记录到视觉伤害。这只是一个烦人的控制台转储。