web-dev-qa-db-fra.com

UITextView - Configuration de la police ne fonctionne pas avec iOS 6 sur XCode 5

J'utilise des storyboards pour mon interface utilisateur. J'utilisais précédemment XCode 4.6 et était disponible sur iOS 6. Depuis, j'ai mis à jour iOS 7 à l'aide de XCode 5 et j'ai mis à jour le Storyboard pour qu'il fonctionne correctement avec XCode 5. J'ai un problème:

UITextView ne veut pas afficher les modifications de police dans le code. Les changements de couleur du texte fonctionnent bien. Tous les autres changements de propriété sont bien. Police, pas du tout. J'utilisais une police personnalisée, j'ai donc vérifié différentes polices avec différentes tailles (c'est-à-dire systemFontOfSize:) mais cela n'a pas fonctionné. La vue texte niquement montre la police définie dans le Storyboard. Que pourrais-je manquer ici? Existe-t-il des contraintes de mise en page automatique qui gênent ce genre de chose? J'ai eu quelques problèmes de contraintes lors de la migration, mais comme je l'ai dit, les polices fonctionnent bien sous iOS 7.

Il me manque quelque chose dans le story-board, car si je crée un UIViewController et ajoute une vue de texte dans le code, cela fonctionne bien.

Je mettrais un peu de code, mais je ne suis pas sûr que cela aiderait du tout dans ce cas.

65
Harry

Le problème était dû à la propriété false de la propriété editable dans le storyboard. Je ne sais absolument pas pourquoi cela a laissé la police inchangée - et uniquement sur iOS 6.

55
Harry

Encore plus étrange, cela ne se produit que sur iPhone, pas sur iPad.

Si vous définissez la police dans le code et que vous ne voulez pas d'une vue de texte modifiable, procédez comme suit:

textView.editable = YES;
textView.font = newFont;
textView.editable = NO;
114
jab

Dans mon cas, il s'agit de la propriété 'sélectionnable' de UITextView.

J'ai donc coché la propriété 'sélectionnable' de UITextView dans Storyboard Editor pour la définir, puis sur Oui. To set selectable

et plus tard dans viewWillAppear, définissez cette propriété sur NO.

textview.text = @"some text";
textview.selectable = NO;
74
Satachito

Pour moi, le travail est simple si vous définissez le texte de votre UITextView et, ensuite, la police (identique pour la couleur):

_myTextView.text = @"text";
[_myTextView setFont:[UIFont fontWithName:@"Helvetica Neue" size:18.0f]];
_myTextView.textColor = [UIColor whiteColor];
20
Jordan Montel

Merci pour toutes les réponses les gars. Le problème est toujours présent sur iOS9. Ce que j’ai découvert, c’est que lorsque vous définissez "interaction utilisateur activée = false" dans le Générateur d’interface, vous pouvez laisser modifiable et sélectionnable = true et l'utilisateur ne pourra pas éditer une vue de texte.

Donc, ma solution est:

  1. Définir interaction utilisateur activée = False dans IB
  2. Set Editable = True dans IB
  3. Définir Selectable = True dans IB
  4. Configurez votre affichage texte comme vous le souhaitez.
13
Flar

Code pour Swift:

textOutlet.editable = true
textOutlet.textColor = UIColor.whiteColor()
textOutlet.font = UIFont(name: "ArialMT", size: 20)
textOutlet.editable = false

Ou si vous modifiez le texte d'abord, il est résolu comme par magie

textOutlet.text = "omg lol wtf"
textOutlet.textColor = UIColor.whiteColor()
textOutlet.font = UIFont(name: "ArialMT", size: 20)
10
Esqarrouth

J'ai trouvé que la taille de la police était ignorée. Cela a été résolu en cochant la case à cocher intitulée: Sélectionnable (après avoir sélectionné UITextView dans le storyboard)

7
Charlie Seligman

Ce problème se produit uniquement lorsque vous définissez la propriété Selectable sur FALSE dans Interface Builder.

Si vous devez définir FALSE sur les propriétés Editable et Selectable, faites-le à partir du CODE et non dans Interface Builder.

En résumé, rendre modifiable et sélectionnable propriétés = OUI dans le Interface Builder, puis ajoutez ce qui suit code au cas où vous auriez besoin que les propriétés soient FALSE:

_textView.editable   = NO;
_textView.selectable = NO;

J'espère que cela t'aides,

6

Swift 3 catégorie qui a fonctionné pour moi:

extension UITextView {
    func setFontAndUpdate(_ font: UIFont?) {
        self.font = font

        // Font doesn't update without text change
        let text = self.text
        self.text = nil
        self.text = text
    }
}
1

Comme mentionné par d'autres:

textView.font = UIFont.systemFont(ofSize: 16)
textView.isEditable = false

p.s. pas besoin de définir d'abord isEditable comme true puisqu'il s'agit de true par défaut: un peu plus court, un peu plus joli

0
Can

Dans mon cas (développement sur Xcode 7.3, iOS 9),

La cause en était l’ordre de réglage du texte et la taille de la police/famille, et non les options de modification ou de sélection spécifiées par de nombreuses réponses (et je n’obtiens pas de storyboard, xib sur cette vue en texte).

Si j'entre comme

[myTextView setFont:[UIFont fontWithName:@"HelveticaNeue-Italic" size:20]];
myTextView.attributedText = mAttStr;

alors la famille et la taille de la police ne sont pas modifiées, mais sinon, lorsque j'inverse ces deux étapes, cela fonctionne. Le texte de réglage doit précéder celui de la famille/taille de la police.

0