Установить семейство шрифтов в TVML
В моем приложении TVML я могу установить свойства стиля шрифта, такие как размер шрифта и вес шрифта, используя tv-text-style: нет, однако я не могу установить свойство font-family, которое, кажется, игнорируется:
var Template = function() { return `<?xml version="1.0" encoding="UTF-8" ?>
<document>
<head>
<style>
.customText {
tv-text-style: none;
tv-position: center;
color: white;
font-size: 40px;
font-weight: bold;
font-family: Courier;
}
</style>
</head>
<paradeTemplate>
...
<listItemLockup>
<title>Title</title>
<relatedContent>
<divTemplate>
<title class="customText">abcABC</title>
</divTemplate>
</relatedContent>
</listItemLockup>
...
Могу ли я установить семейство шрифтов, отличное от семейства системных шрифтов?
Спасибо за вашу помощь,
Лука
2 ответа
Если вы хотите использовать пользовательский шрифт для вашего заголовка, вы должны реализовать пользовательский TVViewElement
который будет использовать любой шрифт. Прежде всего, вам нужно реализовать свой собственный TVInterfaceFactory
, это можно сделать так (решение Swift 2 для tvOS 9):
import UIKit
import TVMLKit
class MyFactory: TVInterfaceFactory {
override func viewForElement(element: TVViewElement, existingView: UIView?) -> UIView? {
switch element {
case let element as MyText where element.elementName == "myCustomText":
let view = MyTextView(frame: CGRectMake(0,0,100,50))
view.text = "my text"
return view
default:
break
}
return nil
}
}
После этого вам нужно реализовать собственный TVML-элемент:
class MyText: TVTextElement {
override var elementName: String {
return "myCustomText"
}
var text: String? {
guard let textValue = attributes?["text"] else { return nil }
return textValue
}
}
И теперь вам нужно реализовать UIView для вашего TVTextElement:
class MyTextView: UIView {
var label: UILabel!
override init(frame: CGRect) {
super.init(frame: frame)
}
var text : String {
get {
return self.text
}
set(value) {
self.label = UILabel(frame: self.frame)
self.label.text = value
self.label.textColor = UIColor.whiteColor()
self.label.font = UIFont(name: "Your custom font", size: 20.0)
self.addSubview(self.label)
}
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Теперь вы можете использовать свой пользовательский элемент в TVML следующим образом:
<myCustomText text="hello world"></myCustomText>
Кроме того, не забудьте зарегистрировать свой элемент в didFinishLaunchingWithOptions
метод:
TVInterfaceFactory.sharedInterfaceFactory().extendedInterfaceCreator = MyFactory()
TVElementFactory.registerViewElementClass(MyText.self, forElementName: "myCustomText")
font-family
теперь доступен в TVML. Не нужно использовать TVInterfaceFactory
для поддержки пользовательских шрифтов больше.
Пример:
tv-text-style: 'none'
font-family: 'Times New Roman'