我的应用程序有一个简单的内置帮助页面。页面从富文本文件加载到NSAttributedString
,字符串显示在UITextView
中。
这是来自prepareForSegue:
的代码片段,我在加载NSAttributedString
之前将其用于显示...
NSURL *const textURL =
[[NSBundle mainBundle] URLForResource: @"DontPanic"
withExtension: @"rtf"];
NSDictionary *const options =
@{NSDocumentTypeDocumentAttribute: NSRTFTextDocumentType};
NSAttributedString *const text =
[[NSAttributedString alloc] initWithURL: textURL
options: options
documentAttributes: nil
error: nil];
这一切都运作良好。但是,它并不支持iOS "Dynamic Type" - 字体会被刻录到RTF文件中,并且不会对用户的设置做出反应。
我喜欢使用系统定义的正文样式的指南:UIFontTextStyleBody
和标题:UIFontTextStyleHeadline
。
我怎么能这样做?
我很高兴能够以HTML或Markdown等其他格式定义指南。如果我可以避免使用外部库,我宁愿不在项目中添加外部库。
答案 0 :(得分:3)
您可以通过CSS访问首选字体。例如,您可以创建一个html文档,如:
<html>
<body>
<h1 style="font: -apple-system-headine; font-family:-apple-system;">My heading</h1>
<p style ="font: -apple-system-body; font-family:-apple-system;">The body of this document</p>
</body>
</html>
然后在上面的代码中将NSRTFTextDocumentType
替换为NSHTMLTextDocumentType
。
CSS中首选字体名称的完整列表是:
-apple-system-headline
-apple-system-subheadline
-apple-system-short-headline
-apple-system-short-subheadline
-apple-system-body
-apple-system-short-body
-apple-system-tall-body
-apple-system-caption1
-apple-system-caption2
-apple-system-short-caption1
-apple-system-footnote
-apple-system-short-footnote
如果您不想在每个元素上定义字体,可以在html <head>
标记中修改样式,如下所示:
<html>
<head>
<style type="text/css">
H1 {font: -apple-system-headine; font-family: -apple-system;}
P {font: -apple-system-body; font-family: -apple-system;}
</style>
</head>
<body>
<h1>This is a heading. It will be shown with the dynamic type headline font.</h1>
<p>This is a paragraph. It will use the dynamic type body font.</p>
</body>
</html>