如何使用 Text Kit 构建像 Medium iOS 应用程序这样的富文本视图?
How to build a rich text view like Medium iOS app using Text Kit?
这是一个富文本视图,文本中有多个图像(高度可变),每个图像都位于两个段落之间。请参考截图。
我知道Text Kit支持排除路径,是否可以基于这项技术构建这样的富文本视图?以及创建排除路径时如何确定图像的位置?
提前致谢。
您不需要排除路径,因为不想让文字环绕图像的形状。您只希望图像显示为它自己居中的段落。这意味着您需要在图像附件前后换行(\n
),并且您需要在附件上设置带有alignment = .Center
的段落样式。
示例:
import UIKit
import XCPlayground
let richText = NSMutableAttributedString(string: "Hello!\n")
let attachment = NSTextAttachment(data: nil, ofType: nil)
attachment.image = UIImage(named: "Kaz-256.jpg")
let imageText = NSAttributedString(attachment: attachment).mutableCopy() as! NSMutableAttributedString
let imageStyle = NSMutableParagraphStyle()
imageStyle.alignment = .Center
imageText.addAttribute(NSParagraphStyleAttributeName, value: imageStyle, range: NSMakeRange(0, imageText.length))
richText.appendAttributedString(imageText)
richText.appendAttributedString(NSAttributedString(string: "\nGoodbye."))
let textView = UITextView(frame: CGRectMake(0, 0, 320, 480))
textView.attributedText = richText
XCPlaygroundPage.currentPage.liveView = textView
结果:
这是一个富文本视图,文本中有多个图像(高度可变),每个图像都位于两个段落之间。请参考截图。
我知道Text Kit支持排除路径,是否可以基于这项技术构建这样的富文本视图?以及创建排除路径时如何确定图像的位置?
提前致谢。
您不需要排除路径,因为不想让文字环绕图像的形状。您只希望图像显示为它自己居中的段落。这意味着您需要在图像附件前后换行(\n
),并且您需要在附件上设置带有alignment = .Center
的段落样式。
示例:
import UIKit
import XCPlayground
let richText = NSMutableAttributedString(string: "Hello!\n")
let attachment = NSTextAttachment(data: nil, ofType: nil)
attachment.image = UIImage(named: "Kaz-256.jpg")
let imageText = NSAttributedString(attachment: attachment).mutableCopy() as! NSMutableAttributedString
let imageStyle = NSMutableParagraphStyle()
imageStyle.alignment = .Center
imageText.addAttribute(NSParagraphStyleAttributeName, value: imageStyle, range: NSMakeRange(0, imageText.length))
richText.appendAttributedString(imageText)
richText.appendAttributedString(NSAttributedString(string: "\nGoodbye."))
let textView = UITextView(frame: CGRectMake(0, 0, 320, 480))
textView.attributedText = richText
XCPlaygroundPage.currentPage.liveView = textView
结果: