Lorsque vous passez d'un champ de texte à un autre, obtenez ceci:
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.
Test dans le simulateur, ne montez pas sur l'appareil. Quelque chose ne va pas avec barre de raccourcis sur le clavier 1 ?
Mon code super facile déclenche la rupture de la contrainte:
-(BOOL)textFieldShouldReturn:(UITextField*)textField
{
[textField resignFirstResponder];
if (textField.tag > 0) {
UITextField *nextTextField = [self.view viewWithTag:textField.tag+1];
[nextTextField becomeFirstResponder];
}
return YES;
}
Cet avertissement m'agace depuis un certain temps. J'ai découvert un "hack" sur deux lignes en vidant leadingBarButtonGroups
et trailingBarButtonGroups
sur la propriété inputAssistantItem
sur UITextField:
inputAssistantItem.leadingBarButtonGroups = []
inputAssistantItem.trailingBarButtonGroups = []
Ceci contrôle les avertissements UIKeyboardAssistantBar AutoLayout lors de l'appel
becomeFirstResonder()
Plus d'informations ici: https://developer.Apple.com/documentation/uikit/uitextinputassistantitem
Note spécifique d'Apple:
Pour masquer les raccourcis, définissez les propriétés LeadingBarButtonGroups et trailingBarButtonGroups sur nil.
Même problème ici. Comme j'ai plusieurs champs de texte, j'ai fait l'extension suivante qui "corrige" tous les UITextFields dans la vue.
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()
}
}
}
}
Utilisation dans ViewController:
override func viewDidLoad()
{
super.viewDidLoad()
view.fixInputAssistant()
...
}