2016-03-01 122 views
2

在我的TVML应用程序中,我可以使用tv-text-style:none设置字体样式属性,例如font-size和font-weight,但是我无法设置font-family属性,这似乎被忽略:在TVML中设置字体家族

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

有没有你认为这应该是可能的一个原因?我在https://developer.apple.com/library/prerelease/tvos/documentation/LanguagesUtilities/Conceptual/ATV_Template_Guide/ITMLStyles.html#//apple_ref/doc/uid/TP40015064-CH11-SW1中看不到任何内容你可以控制使用的实际字体。 –

+1

'font-family'列在文档中https://developer.apple.com/library/content/documentation/LanguagesUtilities/Conceptual/ATV_Template_Guide/ITMLStyles.html#//apple_ref/doc/uid/TP40015064-CH11-SW1 –

回答

0

如果你想使用自定义字体的标题,你应该实现自定义TVViewElement,将使用任何字体。所有的 首先,你需要实现自己的TVInterfaceFactory,这是可以做到这样的:

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") 
+0

你可以在这里添加示例代码吗? – slfan

+0

仅供参考,需要在实现的自定义TVInterface中重写的函数现在是“makeView”而不是“viewForElement”。 – carterh062