2015-05-25 9 views
15

Sto lavorando a un progetto Swift con storyboard in cui voglio inserire il testo in un'etichetta. Nella vecchia versione Objective-C in cui non ho usato uno storyboard ho usato le seguenti impostazioni e le cose hanno funzionato perfettamente.UILabel Text Not Wrapping

Objective-C without Storyboard Settings

Qui ci sono le impostazioni per Swift

Swift with Storyboard Settings

ho letto sui potenziali problemi di layout automatico con impostazioni di larghezza preferite. Attualmente li ho impostati per il layout automatico e l'etichetta stessa è impostata su una larghezza di 560. Ho aggiunto un vincolo per mantenere l'etichetta di 20 pixel dalla superview posteriore e mentre pensavo che funzionasse, non riesco ancora a ottenere il testo avvolgere. Le impostazioni delle dimensioni sono sotto.

Label Dimension and Constraints

Qualcuno può spiegare come ottenere il testo per avvolgere?

+0

Il mio errore sulla terminologia. Volevo dire Storyboard non Playgrounds. – jonthornham

+0

Questo è un miglioramento, ma si noti anche che questo ha _nothing_ a che fare con Swift _or_ Objective-C. Dovresti rimuovere ogni riferimento alla lingua dalla tua domanda. Se in precedenza non hai utilizzato uno storyboard, il contrasto sarebbe tra codice e storyboard o tra file _.xib_ e storyboard. – matt

risposta

48

In primo luogo, la buona notizia: hai impostato l'etichetta su 2 righe e A capo automatico. Quindi lo può eseguire il wrapping. Eccellente.

Ora è necessario assicurarsi che l'etichetta sia abbastanza alta. O dategli il no vincolo di altezza, o dargli un vincolo di altezza abbastanza grande da poter ospitare due linee.

Infine, è necessario limitare la sua larghezza. Questo è ciò che causa il testo da avvolgere. Se non si limita la larghezza dell'etichetta, continuerà a crescere verso destra, potenzialmente continuando fuori dallo schermo. Il limite sulla larghezza dell'etichetta interrompe questa crescita verso destra e fa sì che il testo si sposti (e che l'etichetta cresca invece verso il basso).

È possibile limitare la larghezza in diversi modi. Puoi avere dei vincoli di larghezza effettivi. Oppure puoi avere un vincolo principale e un vincolo finale, a qualcosa di relativamente immobile, come la superview. E c'è un terzo modo: nell'ispettore Dimensioni (che mostri anche, in basso a destra nella tua domanda), imposta la Larghezza preferita (è mostrata nella parte superiore della finestra di ispezione Dimensione): questa è la larghezza alla quale , a parità di altre condizioni, l'etichetta smetterà di crescere a destra e si avvolgerà e si svilupperà invece.

+0

"O non dargli alcun limite di altezza" - Era tutto per me! – Siddhartha

+0

"Infine, devi limitare la sua larghezza" questo ha funzionato per me. Il mio xib aveva un vincolo di larghezza rotto che continuava a impostare il numero di riga su 1. – green0range

1

Il testo verrà completato se il numero di linee fornito è maggiore di 1. Tuttavia potrebbe non essere possibile vederlo avvolgere se l'altezza dell'etichetta non è sufficiente per mostrare il contenuto. Ti suggerisco di rimuovere il vincolo di altezza o aumentare il suo valore.

+0

Ho provato questo e non ho avuto fortuna. Indipendentemente da ciò, grazie per l'input. – jonthornham

0

Ciò che risolveva questo problema stava cambiando il tipo di etichetta in "Segnaposto" sotto Intrinsic Size in IB. Quando ho cambiato questo il testo è stato spostato e gli avvertimenti sono andati via.

+2

"L'impostazione di una dimensione del contenuto intrinseco del tempo di progettazione influisce solo su una vista durante la modifica in Generatore di interfacce. La vista non avrà questa dimensione intrinseca del contenuto in fase di esecuzione." – static0886

+0

@ static0886 hai provato questa risposta e hai scoperto che non è riuscita? Questo sarebbe lontano dalla cosa più strana che ho visto che Interface Builder è contrario alla documentazione. – nolanw

0

Nel caso in cui questo aiuti qualcuno: ho seguito il consiglio dato qui per fissare la mia etichetta non avvolgente su due linee ma niente ha funzionato. Ciò che ha funzionato per me è stata la prima volta che ho cancellato alcuni dei vincoli rilevanti nello storyboard (sto usando il layout automatico) e ho visto che l'etichetta era avvolta correttamente. Ho aggiunto lentamente i vincoli di cui avevo bisogno e tutto sembra funzionare correttamente. Quindi eliminare e rifare i tuoi vincoli può essere d'aiuto.

1

dichiarare il vostro UILabel di programmazione e dare

yourUILabel.contentMode = .scaleToFill 
yourUILabel.numberOfLines = 0 

Questo ha funzionato per me.