1

J'ai remarqué que iOS 11 a apporté quelques modifications à l'UIBarButtonItem. Après avoir résolu le problème de taille de l'image de UIBarButtonItem, je me retrouve face à un autre problème encore plus étrange.iOS 11 espace entre UIBarButtonItem

Nous avons un UIToolBar avec plusieurs UIBarButtonItems et nous avons utilisé pour définir la largeur de l'UIBarButtonItem comme 40 et la largeur de l'UIButton.image comme 24, ce qui laisse un bon espacement entre tous les deux UIBarButtonItems. Cependant, dans iOS 11, l'espace disparaît.

J'ai essayé avec

[self.deleteButton mas_makeConstraints:^(MASConstraintMaker *make) { 
     make.size.mas_equalTo(CGSizeMake(40, 24)); 
    }]; 

NSLayoutConstraint *w = [self.deleteButton.imageView.widthAnchor constraintEqualToConstant:24]; 
NSLayoutConstraint *h = [self.deleteButton.imageView.widthAnchor constraintEqualToConstant:24]; 
w.active = YES; 
h.active = YES; 

mais il ne fonctionne pas comme je pensais. Je reçois soit une liste d'images étirées avec CGSize (40, 24) ou une liste de UIBarButtonItem avec CGSize (24, 24) qui s'alignent un par un dans UINavigationBar sans espacement.

Y a-t-il d'autres contraintes que je dois ajouter pour créer l'espacement?

Répondre

1

Essayez ceci:

UIButton*(^buttonWith)(NSString *) = ^(NSString *imageName) { 
    CGFloat size = 40.0; 
    UIButton *button = [[UIButton alloc] initWithFrame: CGRectMake(0.0, 0.0, size, size)]; 
    [button setImage: [[UIImage imageNamed: imageName] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal] forState: UIControlStateNormal]; 
    [button addConstraint: [NSLayoutConstraint constraintWithItem: button attribute: NSLayoutAttributeWidth relatedBy: NSLayoutRelationEqual toItem: nil attribute: NSLayoutAttributeNotAnAttribute multiplier: 1.0 constant: size]]; 
    [button addConstraint: [NSLayoutConstraint constraintWithItem: button attribute: NSLayoutAttributeHeight relatedBy: NSLayoutRelationEqual toItem: nil attribute: NSLayoutAttributeNotAnAttribute multiplier: 1.0 constant: size]]; 
    return button; 
}; 

Utilisation:

UIButton *resetButton = buttonWith(@"reset"); 
self.resetBarButton = [[UIBarButtonItem alloc] initWithCustomView: resetButton]; 

UIButton *backButton = buttonWith(@"back"); 
self.backBarButton = [[UIBarButtonItem alloc] initWithCustomView: backButton]; 

self.navigationItem.leftBarButtonItems = @[self.backBarButton, self.resetBarButton]; 
0

Dans storyboard, vous pouvez placer une autre UIBarButtonItem entre les boutons qui ont besoin d'espacement. Définissez le texte uniquement sur des espaces. voir les captures d'écran.

enter image description here

enter image description here

enter image description here