J'essaye de faire un UIButton
J'essaye qui a deux lignes de texte dans son titleLabel. Voici le code que j'utilise:
UIButton *titleButton = [[UIButton alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)];
titleButton.titleLabel.font = [UIFont boldSystemFontOfSize:24.0];
[titleButton setTitle:@"This text is very long and should get truncated at the end of the second line" forState:UIControlStateNormal];
titleButton.titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
titleButton.titleLabel.numberOfLines = 2;
[self addSubview:titleButton];
Lorsque j'essaye ceci, le texte n'apparaît que sur une seule ligne. Il semble que le seul moyen d'obtenir plus d'une ligne de texte enUIButton.titleLabel
consiste à définir numberOfLines=0
et à utiliser UILineBreakModeWordWrap
. Mais cela ne garantit pas que le texte comporte exactement deux lignes.
Utiliser une plaine UILabel
Cependant, l' fonctionne:
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)];
titleLabel.font = [UIFont boldSystemFontOfSize:24.0];
titleLabel.text = @"This text is very long and should get truncated at the end of the second line";
titleLabel.numberOfLines = 2;
titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
[self addSubview:titleLabel];
Est-ce que quelqu'un sait comment faire le UIButton
travail avec deux lignes? La seule solution consiste-t-elle à créer UILabel
un élément séparé pour contenir le texte et à l'ajouter en tant que sous-vue du bouton?
objective-c
ios
uibutton
uilabel
marketeur
la source
la source
numberOfLines=0
et utilisezUILineBreakModeWordWrap
, vous pouvez obtenir plusieurs lignes. Le problème avec cela est que cela pourrait donner plus de deux lignes si le texte est trop long. Je veux exactement deux solitaires avec des élipses à la fin de la deuxième ligne (si le texte est trop long).Réponses:
Réponse mise à jour pour les versions iOS plus récentes
Comme c'est la réponse acceptée, ajoutez la réponse de @ Sean ici:
Définissez ces propriétés sur le titleLabel de votre bouton.
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; button.titleLabel.numberOfLines = 2; // if you want unlimited number of lines put 0
Swift 3 et 4:
button.titleLabel?.lineBreakMode = .byWordWrapping button.titleLabel?.numberOfLines = 2 // if you want unlimited number of lines put 0
Réponse originale pour une ancienne version d'iOS
Si vous voulez 2 lignes de texte au-dessus de votre,
UIButton
vous devez ajouter unUIlabel
dessus qui fait précisément cela.UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)]; titleLabel.font = [UIFont boldSystemFontOfSize:24.0]; titleLabel.text = @"This text is very long and should get truncated at the end of the second line"; titleLabel.numberOfLines = 2; titleLabel.lineBreakMode = UILineBreakModeTailTruncation; [myButton addSubview:titleLabel]; //add label to button instead.
Mise à jour pour la solution de création d'interface
Ajout de la réponse de @Borut Tomazin pour une réponse plus complète. Mise à jour de cette partie depuis que la réponse de @Borut Tomazin a été améliorée.
Vous pouvez le faire beaucoup plus facilement, sans code requis. Dans Interface Builder, définissez
Line Break
UIButton surWord Wrap
. Ensuite, vous pouvez insérer plusieurs lignes de titre.Option + Return
Appuyez simplement sur les touches pour créer une nouvelle ligne. Vous devrez également l'ajouter à l'attribut d'exécution défini par l'utilisateur dans Interface Builder:titleLabel.textAlignment Number [1]
la source
UILineBreakMode
sont obsolètes, utilisez-les à laNSLineBreakMode
placeVous n'avez pas besoin d'ajouter un UILabel à l'UIButton. Ce ne sont que des objets et du travail supplémentaires.
Définissez ces propriétés sur le titleLabel de votre bouton.
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; button.titleLabel.numberOfLines = 2;//if you want unlimited number of lines put 0
Rapide:
button.titleLabel!.lineBreakMode = NSLineBreakMode.ByWordWrapping button.titleLabel!.numberOfLines = 2//if you want unlimited number of lines put 0
la source
intrinsicContentSize
, qui renvoie toujours une hauteur qui correspond à une seule ligne de texte. Je l'ai corrigé en remplaçant le boutonintrinsicContentSize
là où je définissais la hauteur[self.titleLabel sizeThatFits(CGSizeMake(self.titleLabel.frame.size.width, CGFLOAT_MAX)].height
.Vous pouvez le faire beaucoup plus facilement, sans code requis. Dans Interface Builder, définissez
Line Break
UIButton surWord Wrap
. Ensuite, vous pouvez insérer plusieurs lignes de titre.Option + Return
Appuyez simplement sur les touches pour créer une nouvelle ligne. Vous devrez également l'ajouter à l'attribut d'exécution défini par l'utilisateur dans Interface Builder:titleLabel.textAlignment Number [1]
C'est si simple. J'espère que cela aide...
la source
titleLabel.textAlignment
attribut d'exécution défini par l' utilisateur dans Interface Builder et en le définissant sur Number = 1 (valeur de NSTextAlignmentCenter).button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; button.titleLabel.textAlignment = NSTextAlignmentCenter; [button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];
la source
NSString
intérieursetTitle
. `` WordWrapping`` fait cela pour vous!Pour éviter complètement le besoin de modifier le code, et donc le besoin de sous-classer votre vue, dans Xcode5 et supérieur, vous pouvez suivre la suggestion de Borut Tomazin:
puis, dans les attributs d'exécution définis par l' utilisateur, vous pouvez ajouter
Chemin clé:
titleLabel.textAlignment
Type:
Number
Valeur:
1
Remarque: ce n'est peut-être pas complètement «à l'épreuve du temps» puisque nous traduisons la
UITextAlignmentCenter
constante en sa valeur numérique (et cette constante peut changer à mesure que de nouvelles versions iOS sont publiées), mais cela semble sûr dans un proche avenir.la source
Vous pouvez modifier la valeur requise directement depuis Storyboard. Sélectionnez le bouton, accédez à l'inspecteur d'identité et ajoutez la paire clé-valeur suivante dans la section "Attributs d'exécution définis par l'utilisateur":
la source