_UIButtonBarStackView: ограничение прерывания при отправке startFirstответчика
При переходе от одного текстового поля к другому получите следующее:
translatesAutoresizingMaskIntoConstraints)
(
"<NSAutoresizingMaskLayoutConstraint:0x6040002806e0 UIKeyboardAssistantBar:0x7f986d40d020.height == 0>",
"<NSLayoutConstraint:0x60400008ece0 _UIButtonBarStackView:0x7f986d4041c0.top == UIKeyboardAssistantBar:0x7f986d40d020.top>",
"<NSLayoutConstraint:0x60400008ed30 UIKeyboardAssistantBar:0x7f986d40d020.bottom == _UIButtonBarStackView:0x7f986d4041c0.bottom>",
"<NSLayoutConstraint:0x60400009f220 _UIButtonBarButton:0x7f986d438480.height == UILayoutGuide:0x6040005b5ee0.height>",
"<NSLayoutConstraint:0x60400008e1a0 _UIButtonBarStackView:0x7f986d4041c0.bottom == UILayoutGuide:0x6040005b5ee0.bottom + 9>",
"<NSLayoutConstraint:0x60400008e100 UILayoutGuide:0x6040005b5ee0.top == _UIButtonBarStackView:0x7f986d4041c0.top + 10>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x60400008e1a0 _UIButtonBarStackView:0x7f986d4041c0.bottom == UILayoutGuide:0x6040005b5ee0.bottom + 9>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
Тестирование в симуляторе, не попадайте на устройство. Что-то не так с панель ярлыков над клавиатурой 1?
![введите описание изображения здесь]()
Мой супер простой код вызывает ограничение прерывания:
-(BOOL)textFieldShouldReturn:(UITextField*)textField
{
[textField resignFirstResponder];
if (textField.tag > 0) {
UITextField *nextTextField = [self.view viewWithTag:textField.tag+1];
[nextTextField becomeFirstResponder];
}
return YES;
}
Ответы
Ответ 1
Это предупреждение раздражало меня довольно долгое время. Я обнаружил двухстрочный "взлом", опустошив leadingBarButtonGroups
и trailingBarButtonGroups
в свойстве inputAssistantItem
на UITextField:
inputAssistantItem.leadingBarButtonGroups = []
inputAssistantItem.trailingBarButtonGroups = []
Это управляет предупреждениями UIKeyboardAssistantBar AutoLayout при вызове
becomeFirstResonder()
Дополнительная информация здесь: https://developer.apple.com/documentation/uikit/uitextinputassistantitem
Конкретная заметка от Apple:
Чтобы скрыть ярлыки в целом, установите для свойств leadingBarButtonGroups и trailingBarButtonGroups значение nil.
Ответ 2
Та же проблема здесь. Поскольку у меня довольно много текстовых полей, я сделал следующее расширение, которое "исправляет" все поля UITextFields в представлении.
extension UIView
{
func fixInputAssistant()
{
for subview in self.subviews
{
if type(of: subview) is UITextField.Type
{
let item = (subview as! UITextField).inputAssistantItem
item.leadingBarButtonGroups = []
item.trailingBarButtonGroups = []
}
else if subview.subviews.count > 0
{
subview.fixInputAssistant()
}
}
}
}
Использование в ViewController:
override func viewDidLoad()
{
super.viewDidLoad()
view.fixInputAssistant()
...
}
Ответ 3
Я попытался inputAssistantItem.leadingBarButtonGroups = [] inputAssistantItem.trailingBarButtonGroups = [] Кажется, это не работает для меня. Кто-нибудь исправил эту проблему?