2013-06-12 15 views
8
self.layer.borderWidth = 0.5; 

su un UIButton o UITextField rendono bene su uno schermo retina, ma su uno schermo non retina solo i bordi superiore e sinistro, mentre la rendono bordi inferiori destra e non rendano.Perché le righe più piccole di 1.0pts non vengono visualizzate correttamente su schermi non retina?

Suppongo che abbia qualcosa a che fare con dpi dello schermo e come vengono disegnate le linee sub punto, ma è possibile che ci sia una spiegazione migliore.

Domanda: mi piacerebbe sapere se è possibile avere tutti i lati del confine spettacolo s' un UIView come previsto sugli schermi sia retina e non retina con borderWidth set per 0.5.

+0

Sulla retina, 0,5 mezze punti è 1 pixel. Un bordo di 1 pixel è un concetto perfettamente coerente e non ambiguo. Sulla non retina, d'altra parte, 0,5 punti è mezzo pixel. Esattamente quale risultato ti aspetteresti * di chiedere al framework di disegnare un bordo di mezzo pixel? –

risposta

9

Se si desidera sempre una linea a pixel singolo (senza punto), sarà necessario utilizzare una larghezza del bordo diversa a seconda della scala dello schermo.

Es .:

CGFloat scale = [[UIScreen mainScreen] scale]; 
if (scale == 2.0) { 
    // retina screen; 
    self.layer.borderWidth = 0.5; 
} else { 
    // non-retina screen 
    self.layer.borderWidth = 1.0; 
} 
+1

questa può essere una risposta accettabile, ma hai idea di cosa causa il codice nella mia domanda per far sì che i bordi destro e inferiore non vengano visualizzati o vengano tagliati? – Brenden

+0

'Altezza CGFloat = 1/[[Scala schermo UIScreen]] o' Altezza altezza = 1/UIScreen.mainScreen(). Scale' per Swift 2.2 –

4

Ora che le scale multiple sono supportati (@ 3x) probabilmente è meglio scrivere la risposta di Matt come questo:

CGFloat scale = [[UIScreen mainScreen] scale]; 
CGFloat width = scale > 0.0 ? 1.0/scale : 1.0; 
[self.layer setBorderWidth:width]; 
+0

Suppongo che sia necessario rimuovere il suffisso 'f' se si sta compilando con 64 bit? Da quello che ho capito, CGFloat è doppio su 64 bit – kalehv

+0

@kalehv Yup, esempio fisso per non usare i suffissi. –