Domanda

Sto avendo un problema con il testo di un UITextField essere offuscata / anti-aliasing, anche con una dimensione di carattere standard. Il testo appare nitido quando il controllo è il primo soccorritore, ma sfocata di nuovo quando si perde lo stato attivo:

alt text
(fonte: mikeweller.com )

Qualcuno sa come risolvere questo problema?

È stato utile?

Soluzione 2

OK sto rispondendo alla mia domanda proprio qui.

Ho trovato un certo numero di riferimenti a questo bug tramite Google, ma tutti lavorato intorno ad esso giocando con le dimensioni dei caratteri. Dopo molta caccia ho trovato questo discussione che dice antialiasing viene applicata quando cornice di una vista contiene valori di pixel frazionari, es se si calcola la sua dimensione come una frazione della vista eccellente.

Certo, basta, gettando i valori CGRect a (int) per la struttura della vista ha funzionato perfettamente. Così, ad esempio, se si voleva il vostro campo di testo per essere centrato verticalmente nel superview, è necessario utilizzare un (int) espressi in questo modo:

textFieldWidth = 300;
textFieldHeight = 31;
offsetX = 0;
offsetY = (superview.bounds.size.height - textFieldHeight) / 2;

textField.frame = CGRectMake((int) offsetX,
                             (int) offsetY,
                             (int) textFieldWidth,
                             (int) textFieldHeight);

C'è anche la funzione CGRectIntegral che è possibile utilizzare per convertire un CGRect a valori interi.

Altri suggerimenti

Usa CGRectIntegral per assicurarsi cornici campi di testo si basano su coordinate intere. Otterrete antialiasing sfocata quando le cose si trovano su coordinate frazionarie.

Oltre a utilizzare il posizionamento non frazionaria bisogna assicurarsi di utilizzare un allineamento non centrato verticale per l'UITextField. Sembra che l'allineamento verticale centrato in combinazione con uno strano risultati dimensione del carattere in offuscata testo, anche.

Mi piacerebbe contribuire come ho appena scoperto la risposta da solo dopo un po 'di frustrazione.

L'UITextField in InterfaceBuilder ha un'altezza telaio forzato di 31 pixel. Questo non può essere scegliere-trascinata per ridimensionare né può essere impostato nelle proprietà di frame a IB. Hai bisogno di andare a viewDidLoad e regolare l'altezza del telaio di 32 pixel, e questo dovrebbe risolvere il problema.

Si spera versioni future di IB saranno correggere questo.

Ho provato ad utilizzare CGRectIntegral e roba del genere. Nel mio caso cambiare la dimensione del carattere min e la dimensione del carattere in IB lo ha fatto.

ho incontrato questo problema prima. La soluzione qui di seguito funziona perfettamente per ogni dimensione testo o frame perché utilizza la funzione rotonda per eliminare i valori dei pixel frazionari. Inserire il codice seguente dopo l'istanza della UITextField in questione.

CGRect temp = textField.frame;
temp.origin.x = round(temp.origin.x);
temp.origin.y = round(temp.origin.y);
textField.frame = temp;

È sufficiente impostare l'altezza del telaio UITextField ad un valore ancora risolto il tutto per me.

questo sito spiega che esso può essere correlato a ridimensionamento e iOS non prendersi cura di questo bug per i livelli, solo i vari punti di vista. Ho aggiornato a Swift 4:

view.contentScaleFactor = UIScreen.main.scale
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top