J'ai créé un UITextView avec une taille de police de 14 dans un story-board et je l'ai connecté à la propriété detailDescriptionLabel de mon ViewController. Ce code est dans viewDidLoad:
self.detailDescriptionLabel.font=[UIFont systemFontOfSize:10];
NSLog(@"text is %@; font is %@", self.detailDescriptionLabel.text, self.detailDescriptionLabel.font);
La sortie de la console suit:
text is Lorem Ipsum; font is (null)
Pourquoi la police est définie sur nil? Le setFont: fonctionne; la police rétrécit. Je souhaite obtenir la police pour pouvoir, après un geste, appeler lineHeight sur la police. De cette façon, je peux savoir quelle ligne a été exploitée avec le code suivant:
int line = [tap locationInView:tap.view].y / self.detailDescriptionLabel.font.lineHeight;
Ici aussi, la police est nulle. La ligne est définie sur -2147483648, ce qui n’est évidemment pas ce que je veux.
Cochez la case "sélectionnable" pour cette UITextView
dans Interface Builder. C'est dans l'inspecteur d'attributs. Selon le commentaire de @ VahramDodoryan ci-dessous, vous pouvez définir selectable
sur false si vous ne souhaitez pas prendre en charge la sélection.
Je ne peux pas expliquer pourquoi cela fonctionne, mais c'est probablement un bogue UIKit. J'ai eu une variable IBOutlet
à une variable UITextView
dont la propriété de police était nulle, et elle ne répondrait à aucune modification de couleur de police ou de texte dans le code jusqu'à ce que après sa propriété de texte ait été définie. Je suis arrivé à cette solution par essais et erreurs.
Si vous rencontrez toujours ce problème avec les versions récentes d’iOS, envisagez d’ouvrir un radar:
J'ai essayé de changer chaque propriété et contrainte, j'avais sur ma vue de texte.
Y compris sélectionnable comme suggéré ci-dessus
Dans la frustration à la fin j'ai supprimé et ré-ajouté et c'était la solution peu satisfaisante.