代码示例
我在自定义(不是 TextView)中有一个NSLayoutManager, NSTextContainer & NSTextStorage
as 属性,初始化如下:NSView
awakeFromNib()
textStorage = NSTextStorage(attributedString: self.attributedString)
layoutManager = NSLayoutManager()
textContainer = NSTextContainer(containerSize: NSMakeSize(self.frame.size.width, 1))
layoutManager.addTextContainer(textContainer)
textStorage.addLayoutManager(layoutManager)
layoutManager.glyphRangeForTextContainer(textContainer)
故意将其垂直设置containerSize
为NSTextContainer
1,以查看它是否具有隐藏正在呈现的文本的预期效果 - 它没有!在视图中呈现此文本没有任何区别 - 这是问题的主题!
在drawRect
我包括下面的行来绘制文本:
let glyphRange = layoutManager.glyphRangeForTextContainer(textContainer)
self.lockFocus()
layoutManager.drawGlyphsForGlyphRange(glyphRange, atPoint: NSMakePoint(0, 0))
self.unlockFocus()
发现
- 最好在翻转坐标系中使用您的自定义视图,就像
NSTextView
我觉得我将进入一个痛苦的世界一样!不管怎样, NSLayoutManager 总是开始在一个翻转的坐标系统内部绘制它的文本(就像NSTextView
) - 的
containerSize.width
属性NSTextContainer
具有以下效果:它在所有级别(包括第一个级别)的行级别上绑定(我知道这很明显,但坚持我......) - 的
containerSize.height
属性NSTextContainer
有一个曲线球:即使包含的视图没有空间垂直显示它,它也不会绑定在第一行但将绑定到后续行
*我花了很长时间才得出这个假设,containerSize.height
因为我只画了一条线!*
问题
- 我的结论是否
NSTextContainer
正确? - 从垂直角度控制文本绘制的最佳方法是什么?我想将我的单行文本放在视图的底部(而不是像默认情况下那样浮动在顶部)