#ios #swift #uikit #wkwebview #uifontpickerviewcontroller
#iOS #swift #uikit #wkwebview #uifontpickerviewcontroller
Вопрос:
Начиная с iOS 13, приложения могут использовать новое Fonts
право с дополнительной опцией «Использовать установленные шрифты» для использования пользовательских шрифтов, установленных специальными приложениями, предоставляющими шрифты. Эти приложения используют те же права, но с дополнительной опцией «Установить шрифты«. Примерами таких приложений являются CreativeCloud от Adobe и MyFonts от MonoType.
Использование установленных шрифтов работает нормально, за исключением WKWebView
.
В качестве примера я использую следующий код для загрузки некоторого текста в WKWebView
элемент управления и использую UIFontPickerViewController
для выбора шрифта. После выбора шрифта обновляются как шрифт элемента управления WebView, так и панель навигации. Это отлично работает со встроенными системными шрифтами. Но после выбора пользовательского установленного шрифта обновляется только шрифт панели навигации. Это указывает на то, что приложение поддерживает установленный пользовательский шрифт, за исключением WKWebView
элемента управления.
class ViewController: UIViewController {
@IBOutlet weak var webView: WKWebView!
var font = "Avenir Next"
let html = """
<style>
body {
font-family: 'FONTFAMILY';
font-size: 40pt;
}
</style>
<body>
This is a test string to demonstrate the characters of a custom installed font named “<b>FONTFAMILY</b>”. Hopefully it will not be replaced by Times New Roman or some other ugly looking font.
</body>
"""
override func viewDidLoad() {
super.viewDidLoad()
loadHTML()
}
@IBAction func selectFont(_ sender: AnyObject) {
let picker = UIFontPickerViewController()
picker.delegate = self
present(picker, animated: true, completion: nil)
}
fileprivate func loadHTML() {
webView.loadHTMLString(html.replacingOccurrences(of: "FONTFAMILY", with: font), baseURL: nil)
navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.font : UIFont(name: font, size: 24)!]
}
}
extension ViewController: UIFontPickerViewControllerDelegate {
func fontPickerViewControllerDidPickFont(_ viewController: UIFontPickerViewController) {
if let family = viewController.selectedFontDescriptor?.object(forKey: .family) as? String {
font = family
loadHTML()
}
}
}
Вопрос: что я должен сделать, чтобы эти пользовательские шрифты работали WKWebView
?
Большинство существующих вопросов в stackoverflow о WKWebView и внешних шрифтах касаются приложений, которые загружают пользовательские шрифты из своего пакета или с внешнего сервера. Более старый метод установки пользовательских шрифтов в iOS использовал профили конфигурации. Это отлично работает с WKWebView, но мой вопрос касается новой техники установки шрифтов iOS 13, как описано здесь:https://developer.apple.com/videos/play/wwdc2019/227 /.
Ответ №1:
После обращения в Apple через DTS я получил косвенное подтверждение того, что эта проблема является ошибкой, поскольку «это может потребовать изменений в ОС, инструментах или фреймворках, которые вы используете». Я отправил отзыв и надеюсь на лучшее.