.rtf(Xcodeに直接貼り付けられた)からのテキストを含むUITextView
があります
コンテキストにはカスタムフォントが1つだけ含まれています(Futura Book BT 11.0)
「text(attributed)」プロパティを「plain」に設定した場合=カスタムフォントはストーリーボードとアプリから正しく表示されます
「text」プロパティを「attributed」=に設定した場合。カスタムフォントはストーリーボードからは正しく表示されますが、アプリからは表示されません。
私の目標は複数のフォントでテキストを機能させることだったので、属性付きプロパティをカスタムフォントで機能させるにはどうすればよいですか? (迅速)
ありがとう!
カスタムフォントはストーリーボードからは正しく表示されますが、アプリからは表示されません。
アプリはフォントをまったく表示しませんか、それともシステムフォントに復元しますか? Helveticaに戻っている場合、これはiOS 8.1の既知のバグのようです http://openradar.appspot.com/radar?id=5117089870249984
考えられる解決策:シミュレーターとデバイスでテストしましたか?シミュレーターでは機能しない可能性があります。つまり、システムにフォントをインストールすることで修正できます。
属性付きUILabelで複数のカスタムフォントを使用したときに同じ問題に直面しました。ストーリーボードは正しい結果を表示しますが、デバイスは表示しません!!
フォントサイズが異なるカスタムフォントのテキストと異なる場合、私が見つけたもの。それはうまくいきます!
そのため、今のところ、わずかな違いはあるフォントサイズを使用しています。一方が14の場合のように、もう一方には14.01を使用しました。ストーリーボード内では不可能なので、ストーリーボードをソースコードとして開き、次のようにフォントサイズを手動で設定しました。
<attributedString key="attributedTitle">
<fragment content="Do not have account? ">
<attributes>
<color key="NSColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<font key="NSFont" size="14" name="Roboto-Light"/>
<paragraphStyle key="NSParagraphStyle" alignment="center" lineBreakMode="wordWrapping" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
</attributes>
</fragment>
<fragment content="Login">
<attributes>
<color key="NSColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<font key="NSFont" size="14.01" name="Roboto-Bold"/>
<paragraphStyle key="NSParagraphStyle" alignment="center" lineBreakMode="wordWrapping" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
</attributes>
</fragment>
<attributedString key="attributedTitle">
しかし、それでも私はそれが起こる理由を見つけることができません!
私がやること:
private var _mutableString: NSMutableAttributedString!
if !isTitle {
var titleFont: UIFont = UIFont(name: StyleGlobals.TitleFontName, size: StyleGlobals.TitleFontSize)!
self._mutableString.addAttribute(NSFontAttributeName, value: titleFont, range: NSMakeRange(0, count(self._mutableString.string)))
self._mutableString.addAttribute(NSForegroundColorAttributeName, value: StyleGlobals.FontColor, range: NSMakeRange(0, count(self._mutableString.string)))
}
self.Label.attributedText = self._mutableString
これにより、新しいフォントの色とフォント自体の両方が適用されます。さまざまなフォントを含めることができる必要がある特定のUILabelがあります。タイトルまたはサブタイトルのいずれかです。したがって、ラベルに何を含めるかを決定したときに、フォントを適用する必要がありました。
私の場合、問題はシステムにフォントがインストールされていないことだったので、FontBookでインストールしました。次に、フォントが属性付きテキストラベルのリストに表示されました。
EDIT:現在のテキストの表示に問題があり、これを実行しました(UILabelを使用しており、UITextViewでテストされていません):
私の解決策は、htmlから属性付き文字列を作成することです(この拡張機能をSOのどこかで見ました):
extension String {
var html2AttStr: NSAttributedString? {
guard let data = dataUsingEncoding(NSUTF8StringEncoding) else { return nil }
do {
return try NSAttributedString(data: data,
options: [
NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: NSUTF8StringEncoding],
documentAttributes: nil)
} catch let error as NSError {
//print(error.code)
return nil
}
}
}
そして、私がすることは次のようなものです:
let htmlStyle = "<meta charset=\"UTF-8\"><style> body { font-family: 'SourceSansPro-Light'; font-size: 18px; text-align: center; } b {font-family: 'SourceSansPro-Light'; }</style>"
let myString = "<font size=\"+2\">Slightly bigger font</font><br><br>Some message with normal text <b>a bold text</b> and some more text"
var attributedString = htmlStyle
attributedString.appendContentsOf(myString)
informationLabel.attributedText = attributedString.html2AttStr
これの利点の1つは、単語/数値などで解析するために、文字列内にいくつかの '%s'テキストを配置できることです。翻訳と解析が簡単です。フォーマットされたテキストでは、テキストを見つけるためのコードをたくさん作成し、周りに何も触れずにフォーマットを適用する必要がありました。これは私にとってはかなりうまくいきます:)
「FuturaBookBT」がカスタムフォントとしてアプリに正しく追加されていることを確認しましたか?
この拡張機能を使用できます
extension NSMutableAttributedString {
func createAttributedString(Word : NSArray, attributeCustomizeFont:UIFont, defaultFont : UIFont, defaultColor : UIColor, allowSpecing : Bool , allowUnderLine : Bool = false) -> NSAttributedString {
self.addAttribute(NSAttributedString.Key.font, value: defaultFont, range: (self.string as NSString).range(of: self.string))
if allowSpecing {
self.addAttribute(NSAttributedString.Key.kern, value: NSNumber(value: 5), range: (self.string as NSString).range(of: self.string))
}else {
self.addAttribute(NSAttributedString.Key.kern, value: NSNumber(value: 0), range: (self.string as NSString).range(of: self.string))
}
self.addAttribute(NSAttributedString.Key.foregroundColor, value: defaultColor, range: (self.string as NSString).range(of: self.string))
for i in 0..<Word.count {
self.addAttribute(NSAttributedString.Key.font, value: attributeCustomizeFont, range: (self.string as NSString).range(of: Word.object(at: i) as! String))
}
if allowUnderLine {
self.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: (self.string as NSString).range(of: self.string))
}
return self
}
}
拡張機能の使用方法
var attributedString = NSMutableAttributedString(string:"Test for set custom font")
attributedString = attributedString.createAttributedString(Word: ["custom font"], attributeCustomizeFont: UIFont(name: "Arial", size: 18)! , defaultFont: UIFont(name: "Helvetica", size: 15)!, defaultColor: UIColor.black, allowSpecing: false) as! NSMutableAttributedString
したがって、文字列全体のフォントセット「Helvetica」はサイズ18で、「カスタムフォント」テキストセット「Arial」フォントはサイズ15です。
viewDidLayoutSubviewsメソッドですべてのコードを呼び出してください!作品より。フォントサイズ、スタイルi viewDidLoadまたはviewWillApperarメソッドを変更するときに、多くの問題が発生します。
したがって、コードをviewDidLayoutSubviewsメソッドに移動するだけです。このメソッドは何度も呼び出すことができるため、フラグを使用してフォントを変更できるのは1回だけです:]
ストーリーボードからUITextviewを「選択可能」にすることは機能します。
✅修正済み:
UITextView
を KMPlaceholderTextView としてサブクラス化することで修正されました。これは、テキストビューにプレースホルダーを追加する場合にも役立ち、InterfaceBuilderからUITextField
と同じように使用できます。
これで、カスタムフォントを正常に使用して、プレースホルダーテキストを追加できます。