2011-11-10 1 views
6

Fenomeno seguente: il mio testo è "Cerca". Creo un UILabel di SmallSystemFontSize e chiamo sizeToFit:.Perché il testo di UILabel è sfocato su iPad se la larghezza non è uniforme?

Il risultato è di 39 unità e il testo appare sfocato. Se aggiusto la larghezza a 40 sembra perfetta.

Ho letto che il testo diventa sfocato se si colpisce subpixel, il che significa che la larghezza sarebbe qualcosa come 39.5, ma sembra che debba essere pari.

Qualcuno può confermare o addirittura spiegare cosa sta succedendo?

risposta

4

UIView elementi sono posizionati dal loro centro che per una dimensione che è dispari è su un mezzo pixel, 19.5 per una larghezza di 39 .. Questo allineamento causa la media dei pixel che provoca la sfocatura.

Un modo è renderlo uniforme.

altro è quello di posizionarlo al centro ad un uso punto ancora:

@property(nonatomic) CGPoint center 

Esempio, per una posizione desiderata del label; a (10, 10, 39, 19) si potrebbe usare:

label.center = CGPointMake(50, 20); 
+0

Mi dici se il mio articolo è largo 39 e lo posiziono impostando la cornice su (10, 10, 39, 19) è sfocato sebbene inizi in un angolo in alto a sinistra (10, 10)? È strano. Qual è il modo migliore/più semplice per risolverlo? – Krumelur

+0

Questa è stata una sorpresa anche per me, vedi l'aggiunta alla mia risposta. – zaph

+0

L'intero effetto sembra un bug nel framework dell'interfaccia utente. Non riesco a vedere alcun senso ... – Krumelur

3

Nel mio caso, aver impostato shouldRasterize = YES sul CGLayer della superview di UILabel era il colpevole. Rimozione di quella linea ha reso il testo piacevole e nitido.

+3

'layer.shouldRasterize = YES;' renderà le cose sfocate solo se non si imposta 'rasterizationScale' sulla scala dello schermo, poiché il valore predefinito è 1.0, indipendentemente dal fatto che si tratti di un display retina o meno. Puoi sistemare ciò facendo 'layer.rasterizationScale = [[UIScreen mainScreen] scale];' – matehat

+0

@matehat Grazie! –