À l'aide de polices personnalisées dans WKWebView
Je suis en utilisant des polices personnalisées dans mon application. Ils sont copiés dans le bundle et codé en dur à appName-info.plist.
Cette polices fonctionne parfaitement dans l'ensemble de l'application et dans UIWebView.
Im chargement htmlString
[webView loadHTMLString:htmlString baseURL:nil];
Je utiliser ces polices dans webView avec les css:
fontFamily: fontName
Mais lorsque j'essaie d'utiliser WkWebView des polices personnalisées ne fonctionne pas. WkWebView affiche par défaut au hasard des polices.
J'ai essayé de le charger avec les principaux bundle chemin dans l'url de base et à l'aide de font-face dans les css - WkWebView affiche toujours aléatoire polices.
Toutes les idées sur la façon de faire de polices personnalisées travail dans WKWebView?
Désolé pour mon anglais
- Comment est-il, comme dans iOS 9? WKWebView dans iOS 9 pouvez charger des fichiers locaux maintenant, est-il aussi capable de charger les polices?
Vous devez vous connecter pour publier un commentaire.
J'ai fait face à la même question, dans mon cas, j'ai pu le résoudre SANS à l'aide de de l'encodage base64 et GCDWebServer.
Scénario:
Fonts provided by application
Solution:
Ajouter de la police face à .css au plus haut niveau comme suit
PROJET DE DÉMONSTRATION:
Projet GitHub Lien
NOTE: Frais de démonstration app peut prendre de 2 à 3 secondes, je l'ai testé pour la longue chaîne html il fonctionne même que UIWebView, pas de lag. Même police peut paraître peu plus petit dans WKWebView que UIWebView.
En supposant que vous intégrer la police dans votre application comme une ressource qui est copié vers la cible bundle, vous pouvez donner à la WKWebView accès à la police par le passage d'un NSURL à il du dossier que le baseURL
et de définir le type de police url sans précédent éléments de chemin d'accès, ce qui rend WKWebKit ajouter le baseURL
@font-face { font-family: 'Ubuntu-R'; src: url('Ubuntu-R.ttf'); }
Fonctionne à merveille. Merci!!!!NSURL *bundleURL = [[NSBundle mainBundle] bundleURL];
baseURL
de regroupement principal des pauses toutes les url relatives à votre rendu html? Parce qu'il permettrait de résoudre sur main bundle url au lieu d'une vraie API url. Je pense que c'est un gros problème.Car je ne veux pas utiliser un autre tiers juste pour ça et depuis que je suis en train de construire la chaîne html lui-même, j'ai pris la première partie de l'aide de la police et au lieu d'utiliser une url à un local ou à distance de fichier, j'ai converti les polices en base64.
Le css ressemble à ceci:
Vous pouvez remplacer le FONTFAMILY avec la famille que vous avez besoin et le FONTBASE64 avec la base de 64 chaîne a été générée à partir de la police.
Si vous avez besoin pour créer la chaîne base64 dans votre application, vous pouvez l'utiliser, il suffit de fournir le nom de fichier et le type (je l'ai utilisé pour obtenir d'autres fichiers ainsi donc, c'est plus générique, vous pouvez supprimer le ofType paramètre et utilisez " @"ttf" à la place):
si vous voulez faire une seule fois, puis de l'enregistrer dans un fichier, vous pouvez utiliser l'un des sites en ligne qui convertit les fichiers en base64, comme ceci: http://www.opinionatedgeek.com/dotnet/tools/base64encode/
Ma conjecture est que le
WKWebView
ne peut plus accéder aux polices spécifiques à l'application, car il est maintenant dans un processus séparé (XPC).J'ai eu autour de ce par l'ajout de la police avec
@font-face
déclarations CSS. Voir ici pour plus de détails sur MDN sur la façon de le faire.Exemple:
Mais cela ne va pas faire référence à un fichier local, qui le
WKWebView
ne peut pas le faire (je suppose que vous avez déjà découvert ce parce que vous êtes en train de charger une chaîne HTML au lieu du fichier). Comme par un commentaire sur cette question, j'ai été en mesure d'utiliser GCDWebServer pour obtenir mon fichier HTML local de travail. Dans votre application délégué, après avoir ajouté les fichiers à votre projet, comme par le GCDWebServer du wiki sur GitHub:Maintenant, vous pouvez faire référence à un fichier HTML nommé
test.html
dans votre bundle comme ceci:Mettre ladite
@font-face
la déclaration dans unstyle
élément dans votre fichier HTML (ou dans votre chaîne HTML si vraiment vous suffit de charger une chaîne de caractères) et vous devriez être bon d'aller.font-weight
au lieu defont-style
fonctionne pour moi à l'appui de gras variante.. je l'espère, sera utile pour quelqu'un...Ici est une swift 3 version de @Henrik Hartz génial réponse: