12
votes

Puis-je centrer un article uitoolbar?

Je mettais une étiquette sur un UIToolbar (par cette astuce: Ajouter un Uilabel à un uitoolbar ).

Mais la barre d'outils a un bouton sur le côté gauche et si des espaces flexibles jettent l'étiquette du centre, ce qui est là où j'aimerais que ce soit. Puis-je centrer en quelque sorte cette barre d'outils afin qu'elle reste centrée dans la barre d'outils?

(déjà essayé d'équilibrer le bouton avec un espace fixe factice, pas de dés.)

merci!


0 commentaires

5 Réponses :


4
votes

La manière la plus simple serait de mettre l'étiquette au-dessus de la barre, de sa vue parent et de le justifier là-bas.


3 commentaires

Merci autre-ben, c'était mon plan B. :)


La méthode de l'ESICS est supérieure et plus facile à mettre en œuvre.


La méthode de l'ESICS est "statique" et ne fonctionne pas lorsque vous changez d'orientation



39
votes

Ajoutez un élément d'espace flexible à gauche et à droite de votre article centre, comme vous l'avez fait. Ajoutez ensuite un élément d'espace fixe à la fin et réglez la largeur sur la largeur de la touche gauche - environ 28 pixels. xxx


1 commentaires

Cela suppose que la police système ne changera jamais (il a plusieurs fois) et l'utilisateur ne définira jamais une police de tailles différente. Il ignore également les localisations du titre de votre bouton étant différentes largeurs.



6
votes

Pour centrer un texte / titre sur une barre d'outils Vous pouvez utiliser un simple uilabel code> comme voir ci-dessous:

UILabel *labelTitle = [[UILabel alloc] init];
labelTitle.font =[UIFont fontWithName:@"Helvetica-Bold" size:18];
labelTitle.backgroundColor = [UIColor clearColor];
labelTitle.textAlignment = UITextAlignmentCenter;
labelTitle.userInteractionEnabled = NO;
labelTitle.text = @"Your Title";
[labelTitle sizeToFit];
CGRect labelTitleFrame = labelTitle.frame;
labelTitleFrame.size.width = self.toolbar.bounds.size.width;
labelTitleFrame.origin.y = (self.toolbar.bounds.size.height - labelTitleFrame.size.height) / 2;
labelTitle.frame = labelTitleFrame;
labelTitle.autoresizingMask = UIViewAutoresizingFlexibleWidth;
// Just add UILabel like UIToolBar's subview 
[self.toolbar addSubview:labelTitle];
[labelTitle release];
labelTitle = nil;


1 commentaires

Cette méthode fonctionne correctement lorsque vous changez d'orientation et quand il y a des boutons de barre gauche ou droite



1
votes

Oui, nous pouvons centrer une partie de la barre d'outils, il suffit de mettre deux espace flexible dans la barre d'outils comme: xxx


0 commentaires

0
votes

Si vous n'utilisez pas d'espaces flexibles ou fixes, vous pouvez modifier la distribution Uistackbar interne UistackView comme ci-dessous. Notez que vous devez appeler Toolbar.centeritemshorizontalement () Code> dans votre contrôleur d'affichage ViewDidLayouTouSubviews () Code> Méthode.

extension UIView {
    func allSubviews() -> [UIView] {
        var _allSubviews: [UIView] = []
        for subview in self.subviews {
            _allSubviews += subview.allSubviews()
            _allSubviews.append(subview)
        }
        return _allSubviews
    }
}
extension UIToolbar {
    func centerItemsHorizontally() {
        allSubviews().forEach { subview in
            if let stackView = subview as? UIStackView {
                stackView.distribution = .fillEqually
            }
        }
    }
}


0 commentaires