_UIButtonBarStackView:当sentFirstResponder发送时打破约束

Ján*_*nos 20 objective-c uitextfield becomefirstresponder ios nslayoutconstraint

从一个文本域跳转到另一个文本域时,得到:

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.
Run Code Online (Sandbox Code Playgroud)

在模拟器中测试,不要使用设备.键盘1上的快捷键有问题吗?

在此输入图像描述

我的超级简单代码触发了破坏约束:

-(BOOL)textFieldShouldReturn:(UITextField*)textField
{
    [textField resignFirstResponder];

    if (textField.tag > 0) {

        UITextField *nextTextField = [self.view viewWithTag:textField.tag+1];
        [nextTextField becomeFirstResponder];
    }

    return YES;
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*ong 20

这个警告让我很烦恼了一段时间.我通过清空leadingBarButtonGroups和UITextField trailingBarButtonGroups上的inputAssistantItem属性发现了两行'hack' :

inputAssistantItem.leadingBarButtonGroups = []
inputAssistantItem.trailingBarButtonGroups = []
Run Code Online (Sandbox Code Playgroud)

这会在调用时控制UIKeyboardAssistantBar AutoLayout警告

becomeFirstResonder()
Run Code Online (Sandbox Code Playgroud)

更多信息:https://developer.apple.com/documentation/uikit/uitextinputassistantitem

Apple特别说明:

要完全隐藏快捷方式,请将leadingBarButtonGroups和trailingBarButtonGroups属性设置为nil.

  • 这似乎只发生在禁用自动更正或安全的 UITextField 上(例如输入密码)。在这种情况下,没有快捷方式可用,并且此条框设置为零 CGRect。这会导致自动布局问题。 (2认同)