2013-10-02 14 views
6

In Objective-C ho un UILabel che dice "Caricamento". Ogni 0,5 secondi la stringa otterrà un altro '.' fino a quando non ci sono 3 punti, quindi ricomincia. Il problema che sto affrontando è che la mia corda è centrata e quando appare ogni punto, la corda salta. Il motivo per cui i salti di stringa sono perché UILabel continua a tagliare gli spazi bianchi giusti.Il testo UILabel include più spazi alla fine

Ecco un esempio di cosa sta accadendo attualmente.

+------------+ 
| Loading | 
+------------+ 
| Loading. | 
+------------+ 
| Loading.. | 
+------------+ 
| Loading... | 
+------------+ 

E questo è quello che voglio succedere.

+------------+ 
| Loading | 
+------------+ 
| Loading. | 
+------------+ 
| Loading.. | 
+------------+ 
| Loading... | 
+------------+ 

Dire alla UILabel di avere una larghezza maggiore e di essere allineati a sinistra non è un'opzione. Questo deve essere fatto con il testo.

Ho trovato questo link, ma non riesco ancora a capirlo.

Quello che ho attualmente è questo.

[NSString stringWithFormat:@"%-3.3s", [@"" UTF8String]]; 
[NSString stringWithFormat:@"%-3.3s", [@"." UTF8String]]; 
[NSString stringWithFormat:@"%-3.3s", [@".." UTF8String]]; 
@"..."; 
+2

perché è allineato a sinistra *** *** non un'opzione? sembra la soluzione più semplice. –

+0

@MichaelDautermann perché la vista in cui si trova la UILabel è estremamente dinamica e utilizzata in molti posti. Estendere la sua già enorme quantità di funzionalità non è desiderabile. – cnotethegr8

+0

Stai usando un carattere a spaziatura fissa in quell'etichetta?In caso contrario, è improbabile che l'aggiunta di spazi dia comunque testo allineato. –

risposta

4

Il modo in cui il testo funziona su etichetta è - esso è formattato da informazioni formattazione standard - come il taglio ecc Se non si desidera ios di prendere il controllo su questo. È possibile impostare a livello di programmazione attribuitoTesto. questo non va attraverso la formattazione. Ecco la documentazione di Apple su quello

attribuitoTesto Il testo con lo stile visualizzato dall'etichetta.

@property (nonatomic, copy) NSAttributedString * attributeText Discussion Questa proprietà è nil per impostazione predefinita. Assegnando un nuovo valore a , questa proprietà sostituisce anche il valore della proprietà text con gli stessi dati di stringa , sebbene senza alcuna informazione di formattazione. Nell'aggiunta , l'assegnazione di un nuovo valore aggiorna i valori nel carattere, textColor e altre proprietà correlate allo stile in modo che riflettano le informazioni sullo stile iniziando dalla posizione 0 nella stringa attribuita.

Essenzialmente impostato attributedtext di UILabel "Caricamento"

1

un'occhiata al this

la soluzione è aggiungere trascinamento charaters visibili e li trasparente.

1

Set label.textAlignment = NSTextAlignmentNatural. Dato che ios 9, questo è il default, prima era usato come NSTextAlignmentLeft.

Ora che il testo deve essere centrato, avvolgerlo in un UIView con tutti i margini dell'etichetta ancorati a quello della vista del wrapper. Quindi centrare il wrapper anziché l'etichetta.

Ecco il codice:

UIView* wrapper = [[UIView alloc] init]; 
wrapper.translatesAutoresizingMaskIntoConstraints = NO; 
//This sets the wrapper at the center of where you were adding the label previously 
[wrapper.centerXAnchor constraintEqualToAnchor: superview.centerXAnchor].active = YES; 

label.translatesAutoresizingMaskIntoConstraints = NO; 
[label.leadingAnchor constraintEqualToAnchor:wrapper.leadingAnchor].active = YES; 
[label.trailingAnchor constraintEqualToAnchor:wrapper.trailingAnchor].active = YES; 
[label.topAnchor constraintEqualToAnchor:wrapper.topAnchor].active = YES; 
[label.bottomAnchor constraintEqualToAnchor:wrapper.bottomAnchor].active = YES; 

label.textAlignment = NSTextAlignmentNatural 
... 
Problemi correlati