2016-03-01 183 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