J'ai implémenté la vue d'accessoire d'entrée personnalisée qui fonctionnait correctement jusqu'à iOS 10.3.1. Mais ce n'est pas visible dans iOS 11 beta.
Quelqu'un at-il rencontré ce problème?
La question que vous posez n'a pas beaucoup de détails. Mais j'ai eu le même problème lors de l'utilisation d'un inputAccessoryView et d'un inputView personnalisé pour le champ de texte.
Et résolu ce problème sur iOS11 en définissant le masque autoresizingMask de inputView personnalisé sur .flexibleHeight.
yourCustomInputView.autoresizingMask = .flexibleHeight
J'espère que cela résoudra le problème. Si non, peut-être fournir des informations supplémentaires?
Voici comment j'ajoute l'accessoire d'entrée, au cas où cela serait plus utile (en tant qu'extension de textfield):
public extension UITextField {
public func addToolbarInputAccessoryView(barButtonItems: [UIBarButtonItem],
textColour: UIColor,
toolbarHeight: CGFloat = 44,
backgroundColour: UIColor = .white) {
let toolbar = UIToolbar()
toolbar.frame = CGRect(x: 0, y: 0, width: bounds.width, height: toolbarHeight)
toolbar.items = barButtonItems
toolbar.isTranslucent = false
toolbar.barTintColor = backgroundColour
toolbar.tintColor = textColour
inputAccessoryView = toolbar
}
}
Ensuite, sur inputView (pas le inputAccessoryView ), j’utilisais un sélecteur de date par exemple - assurez-vous simplement que le masque de redimensionnement automatique du sélecteur de date est défini sur une hauteur flexible.
PSA: Si vous utilisez une barre UIToolbar en tant que vue personnalisée, elle est actuellement interrompue dans iOS 11 GM . Au lieu de perdre vos cheveux sur la façon de la réparer, il suffit de la changer en UIView . perdre l’effet de flou mais cela fonctionnera.
La bêta 3 vient de sortir et certaines personnes ont dit qu'elle résolvait le problème, mais pour moi ça ne l'a pas été.
Cependant, j'ai essayé de régler la vue des accessoires sur quelque chose de stupide (100 pixels de haut) et j'ai remarqué que la barre d'annulation/restauration/collage sur les iPad était mal installée au-dessus de ma barre d'accessoires. de pommes (il était de toute façon inutile pour mon cueilleur personnalisé) et le problème a disparu
J'espère que ça aide quelqu'un
- (void)textFieldDidBeginEditing:(UITextField*)textField
{
UITextInputAssistantItem* item = [textField inputAssistantItem];
item.leadingBarButtonGroups = @[];
item.trailingBarButtonGroups = @[];
}
Pour éviter le problème inputAccessoryView
dans iOS 11 pour UITextField
et UITextView
, utilisez simplement le code suivant:
UIView *inputView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 150)];
self.monthPickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 150)];
self.monthPickerView.backgroundColor = [UIColor whiteColor];
self.monthPickerView.delegate = self;
self.monthPickerView.dataSource = self;
[inputView addSubview:self.monthPickerView];
cell.monthTextField.inputView = inputView ;
self.monthTextField.inputAccessoryView = [self doneButtonAccessoryView];
// doneButtonAccessoryView Method
-(UIToolbar*)doneButtonAccessoryView
{
UIToolbar *kbToolbar = [[UIToolbar alloc] init];
[kbToolbar sizeToFit];
[kbToolbar setBarTintColor:[UIColor whiteColor]];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
style:UIBarButtonItemStyleDone target:self
action:@selector(doneClicked)];
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Cancel"
style:UIBarButtonItemStyleDone target:self
action:@selector(cancelClicked)];
NSDictionary *attrDict;
attrDict = [NSDictionary dictionaryWithObjectsAndKeys:
[UIFont fontWithName:@"Helvetica-Bold" size:16.0], NSFontAttributeName, nil];
[doneButton setTitleTextAttributes:attrDict forState:UIControlStateNormal];
UIBarButtonItem *flexWidth = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:self action:nil];
[kbToolbar setItems:[NSArray arrayWithObjects:cancelButton,flexWidth, doneButton, nil]];
return kbToolbar;
}
J'ai le même problème et j'ai découvert que la suppression de toutes les contraintes bottom
, top
, leading
, training
, left
, right
pour la vue Attribuée. accessoryView
l'a résolue.
UIToolBar est cassé dans iOS 11. Mais vous pouvez obtenir la même chose en utilisant UIView en tant que inputAccessoryView. Exemple de code extrait ici:
CGFloat width = [[UIScreen mainScreen] bounds].size.width;
UIView* toolBar = [[UIView alloc] initWithFrame:CGRectMake(0.0f,0.0f, width, 44.0f)];
toolBar.backgroundColor = [UIColor colorWithRed:0.97f green:0.97f blue:0.97f alpha:1.0f];
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(20.0 , 0.0f, width, 44.0f)];
[titleLabel setFont:[UIFont fontWithName:@"Helvetica" size:13]];
[titleLabel setBackgroundColor:[UIColor clearColor]];
[titleLabel setTextColor:[UIColor redColor]];
[titleLabel setText:@"Title"];
[titleLabel setTextAlignment:NSTextAlignmentLeft];
[toolBar addSubview:titleLabel];
UIButton *doneBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[doneBtn setTitle:@"Done" forState:UIControlStateNormal];
doneBtn.tintColor = [UIColor colorWithRed:(float)179/255 green:(float)27/255 blue:(float)163/255 alpha:1];
[doneBtn.titleLabel setFont:[UIFont fontWithName:@"Helvetica" size:16]];
[doneBtn addTarget:self action:@selector(btnTxtDoneAction) forControlEvents:UIControlEventTouchUpInside];
[doneBtn setFrame:CGRectMake(width-70, 6, 50, 32)];
[toolBar addSubview:doneBtn];
[toolBar sizeToFit];
txtMessageView.inputAccessoryView = toolBar;
J'espère que cette aide .. :)