ios click guideline - Come si aggiunge il testo multilinea a un UIButton?





12 Answers

La risposta selezionata è corretta, ma se preferisci fare questo genere di cose in Interface Builder puoi farlo:

types insert xcode

Ho il codice seguente...

UILabel *buttonLabel = [[UILabel alloc] initWithFrame:targetButton.bounds];
buttonLabel.text = @"Long text string";
[targetButton addSubview:buttonLabel];
[targetButton bringSubviewToFront:buttonLabel];

... l'idea è che posso avere un testo a più righe per il pulsante, ma il testo è sempre oscurato da backgroundImage di UIButton. Una chiamata di registrazione per mostrare le sottoview del pulsante mostra che UILabel è stato aggiunto, ma il testo stesso non può essere visto. Si tratta di un bug in UIButton o sto facendo qualcosa di sbagliato?




Se vuoi aggiungere un pulsante con il titolo centrato su più righe, imposta le impostazioni del tuo Interface Builder per il pulsante:

[ ]




SWIFT 3

button.titleLabel?.lineBreakMode = .byWordWrapping
button.titleLabel?.textAlignment = .center  
button.setTitle("Button\nTitle",for: .normal)



Allinea a sinistra su iOS7 con autolayout:

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentLeft;
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;



Per coloro che utilizzano lo storyboard di Xcode 4, puoi fare clic sul pulsante e sul lato destro del pannello Utilità sotto Impostazioni Inspection, vedrai un'opzione per Line Break. Scegli Word Wrap e dovresti essere pronto.




In Xcode 9.3 puoi farlo usando lo storyboard come di seguito,

È necessario impostare il titolo del testo textAlignment al centro

button.titleLabel?.textAlignment = .center

Non è necessario impostare il testo del titolo con una nuova riga (\ n) come di seguito,

button.setTitle("Good\nAnswer",for: .normal)

Basta impostare il titolo,

button.setTitle("Good Answer",for: .normal)

Ecco il risultato,




Devi aggiungere questo codice:

buttonLabel.titleLabel.numberOfLines = 0;



Se si utilizza il layout automatico su iOS 6, potrebbe anche essere necessario impostare la proprietà preferredMaxLayoutWidth :

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentCenter;
button.titleLabel.preferredMaxLayoutWidth = button.frame.size.width;



Se si utilizza il layout automatico.

button.titleLabel?.adjustsFontSizeToFitWidth = true
button.titleLabel?.numberOfLines = 2



Rolla la tua classe di pulsanti. È di gran lunga la soluzione migliore a lungo termine. UIButton e altre classi UIKit sono molto restrittive su come personalizzarle.




Ho incorporato la risposta di STAButton all'interno di STAButton che fa parte della mia STAControls open source STAControls . Attualmente lo uso in una delle app che sto sviluppando e funziona per le mie esigenze. Sentiti libero di aprire i problemi su come migliorarlo o mandami richieste di pull.




Anche se va bene aggiungere una sottoview a un controllo, non c'è alcuna garanzia che funzioni effettivamente, perché il controllo potrebbe non aspettarsi che sia lì e potrebbe quindi comportarsi male. Se riesci a farla franca, aggiungi l'etichetta come vista di pari livello del pulsante e imposta la sua cornice in modo che si sovrapponga al pulsante; fino a quando è impostato per apparire in cima al pulsante, nulla che il pulsante possa fare lo oscurerà.

In altre parole:

[button.superview addSubview:myLabel];
myLabel.center = button.center;



Related