2016-05-24 28 views
5

Ho una singola riga UILabel. Ha width = larghezza dello schermo e il contenuto è ora (il contenuto di UILabel può cambiare)UILabel troncare la coda e saltare la parola non completa

Hai 30 secondi per fare una buona impressione nel corso di un'intervista

Attualmente, la coda UILabel viene troncato e la parola "durata" non è completa

self.nameLabel.lineBreakMode = NSLineBreakByTruncatingTail; 

Quello che voglio è che voglio la mia UILabelancora coda troncata e solo visualizzare la parola completa.
Come l'immagine qui sotto

enter image description here

Qualsiasi aiuto o suggerimento sarebbe grande apprezzato.

+0

puoi usare truncate middle perché tronchi coda –

+0

@PKT scusami per la mia brutta spiegazione in inglese :(ma per favore vedi la mia immagine, voglio realizzarla in quel modo –

+0

penso che tu abbia bisogno di inserire? –

risposta

3

si può fare qualcosa di simile:

let labelWidth = CGRectGetWidth(label.bounds) 

    let str = "You will have 30 seconds till you give us a good impression" as NSString 
    let words = str.componentsSeparatedByString(" ") 

    var newStr = "" as NSString 

    for word in words{ 

     let statement = "\(newStr) \(word) ..." as NSString 
     let size = statement.sizeWithAttributes([NSFontAttributeName:label.font]) 
     if size.width < labelWidth { 
      newStr = "\(newStr) \(word)" 
     } 
     else{ 
      break 
     } 
    } 

    newStr = newStr.stringByAppendingString(" ...") 

    self.label.text = newStr as String 

Idea è: abbiamo diviso le parole e tenta controllare la larghezza, mentre aggiungendo dall'inizio + la stringa "..." fino a che abbiamo trovato la parola che verrà superi la dimensione, nel caso ci fermiamo e usiamo questa nuova stringa

+0

grazie mille. la tua idea è molto buona e seguila posso risolvere il mio problema. ma in 'statement.sizeWithAttributes' serve un dizionario e dovresti aggiungere' else {break; } 'quando' size.width

+0

su 'else {break}' hai ragione, ho modificato la soluzione. Per il dizionario, puoi passare le informazioni sui font e altri parametri che hai in caso di testo attribuito. –

0

Idealmente questo non è possibile, con UILabel predefinito, quando si imposta lineBreakMode su TruncatingTail, a seconda dello spazio richiesto dalla lettera/parola il sistema operativo lo tronca, una soluzione per risolvere il problema è possibile utilizzare le seguenti proprietà a seconda di la tua partita.

Scala minima font - Utilizzare questa proprietà per specificare il moltiplicatore più piccolo per la dimensione del carattere corrente che restituisce una dimensione di carattere accettabile da utilizzare quando si visualizza il testo dell'etichetta. Se si specifica un valore 0 per questa proprietà, la dimensione del carattere corrente viene utilizzata come dimensione del carattere più piccola.

Dimensione carattere minima - Quando si disegna un testo che potrebbe non adattarsi al rettangolo di delimitazione dell'etichetta, è possibile utilizzare questa proprietà per impedire al ricevitore di ridurre la dimensione del carattere fino al punto in cui non è più leggibile.

0

non sono sicuro, ma provo:

nameLabel.adjustsFontSizeToFitWidth = NO; 
nameLabel.lineBreakMode = NSLineBreakByWordWrapping; 

O

Se si utilizza storyboard attenersi alla seguente procedura Ho provato questo e lavorando bene

  • Aprire Attribute Inspector
  • Modifica interruzioni di riga per troncare coda, quindi

  • Change AutoShrink al minimo Font Size

enter image description here

qui sono le mie schermate di etichetta dopo e prima di applicare queste proprietà

enter image description here

nuova uscita

enter image description here

+0

Grazie. L'ho provato ma produrrà il risultato come la mia prima immagine –

+0

se usi lo storyboard controlla la mia risposta aggiornata funziona per me –

+0

Ridurrà la dimensione del font di 'UILabel' – TheTiger