J'ai un problème avec le texte d'un Uitextfield étant flou / anti-aliasé même avec une taille de police standard. Le texte apparaîtra croustillant lorsque le contrôle est le premier répondant, mais floue à nouveau lorsqu'il perd la mise au point: p>
Quelqu'un sait-il comment résoudre ce problème? p>
(source: Mikeweller.com ) SUB> p>
8 Réponses :
OK, je réponds ici ma propre question ici.
J'ai trouvé un certain nombre de références à ce bogue via Google, mais tout le monde a travaillé autour de celui-ci en jouant avec des tailles de police. Après beaucoup de chasse, j'ai trouvé Ce fil qui dit que l'anti-aliasing est appliqué lorsque la trame d'une vue contient des valeurs de pixels fractionnaires, par exemple Si vous calculez sa taille comme une fraction de la super vue. P>
Assez sûr, jetant les valeurs de CGRRECT à (int) pour la trame de la vue fonctionnant parfaitement. Ainsi, à titre d'exemple, si vous voulez que votre champ de texte soit centré verticalement dans la supervish, vous devez utiliser un (int) lancé comme suit: P>
textFieldWidth = 300; textFieldHeight = 31; offsetX = 0; offsetY = (superview.bounds.size.height - textFieldHeight) / 2; textField.frame = CGRectMake((int) offsetX, (int) offsetY, (int) textFieldWidth, (int) textFieldHeight);
Je vous suggère NE PAS I> CASTER à INT pour arrondi une valeur de point flottante. Il y a une fonction pour cela. C'est rond code>. La coulée sur INT sera renvoyée pour flotter implicitement comme
CGrectument code> prend des paramètres de flotteur. Cette double fonte obscope son intention et pourrait éventuellement jouer pire. Là encore, CGRRECTINTEGAL est encore meilleur.
De plus, au lieu de rond, vous pouvez utiliser CIELF ou plancher (??) pour arrondir respectivement à la valeur intégrale la plus proche.
Utilisez CGRECRETINGAL pour s'assurer que les cadres de champs de texte sont basés sur des coordonnées entier. Vous obtiendrez une antialiasing floue lorsque les choses se trouvent sur les coordonnées fractionnaires. P>
Sollution la plus propre. Pour mon but, j'ai ajouté une extension Nsview avec - (vide) ConvertFramemeAsectureSointEger {Self.frame = CGRectIntegral (Self.frame); } code> .. mais même mieux serait d'avoir un drapeau comme
utilletegerbounds code> et écraser
--SetFrame code>
J'aimerais bien contribuer car je viens de découvrir la réponse à mienne après une frustration assez frustrante. P>
Le Espérons que les futures versions de l'IB corrigeront cela. P> uitextfield code> in
interfaceBuilder code> a une hauteur forcée de 31 pixels. Cela ne peut pas être cliqué sur glisser pour redimensionner et ne peut-il pas être défini dans les propriétés du cadre dans IB. Vous devez aller à
ViefDiDload Code> et régler la hauteur de trame à 32 pixels, ce qui devrait résoudre le problème. P>
En plus de l'utilisation de positionnement non fractionné, il faut veiller à utiliser un alignement vertical non centré sur l'UITEXTFIELD. On dirait que l'alignement vertical centré en combinaison avec une taille de police étrange entraîne également un texte flou également. P>
J'ai essayé d'utiliser CGRectureTegral et des trucs. Dans mon cas, la variation de la taille de la police et la taille de la police dans IB l'a fait. P>
J'ai déjà rencontré ce problème. La solution ci-dessous fonctionne parfaitement pour tout texte ou format de cadre car il utilise la fonction ronde pour se débarrasser des valeurs de pixels fractionnaires. Insérez le code suivant après votre instanciation de l'UITEXTFIELD en question.
Définit simplement le Uitextfield Code> Hauteur de cadre à une valeur pare-dessus fixe pour moi. P>
Cela ne résout pas le problème cependant, cela fonctionne simplement autour du problème sous-jacent afin que vous ayez une taille qui ne provoque pas la floue. Forcer le cadre dans des valeurs intégrées correctement correctement le problème.
Bien pour moi c'est fait. J'utilise SystemFontfsize: 18
solution de Ce site explique que Il peut être lié au redimensionnement et IOS ne prend pas soin de ce bogue pour les couches, uniquement les différentes vues. Je l'ai mis à jour à Swift 4:
J'ai ouvert cela comme un wiki, n'hésitez pas à modifier la question / la réponse.