我有一个带有一些排除字符的NSTextView
,因此我可以垂直移动文本,而不必诉诸于字符串中。但是,我注意到排除矩形是相当有限的,甚至可能是越野车,因为我不能垂直移动文本超过文本视图高度的〜45%。我找到了一种解决方法,可以将textview的高度增加2倍,但这感觉很粗糙,我宁愿“适当地”执行此操作]
在上图中,我有三个文本视图(从左到右)
NSScrollView
中,高度为2x)>NSScrollView
封装。 2x高度[排除矩形是用CAShapeLayer
绘制的,您可以看到“ hello world new world”未正确放置在排除矩形之外。
我尝试了所有三个示例,以确保当封装在NSScrollView
中时,关于IB默认设置或文本视图的动态,我不会丢失任何东西(AppKit和TextKit并不熟悉),但是所有3个示例都展示了相同的错误。
((每次滑块在右下角移动,它将更新其文本矩形)
label.stringValue = "excl: \(sender.integerValue): height: \(view.frame.height)"
print(sender.integerValue)
let exclHeight: CGFloat = CGFloat(slider.integerValue)
[aTextView, bTextView, cTextView]
.compactMap { $0 }
.forEach {
let rect = CGRect(
x: 5,
y: 5,
width: aTextView.frame.width - 10,
height: exclHeight)
$0.wantsLayer = true
$0.textContainer?.exclusionPaths.removeAll()
$0.textContainer?.exclusionPaths.append(.init(rect: rect))
$0.layer?.sublayers?.forEach {
$0.removeFromSuperlayer()
}
let layer = CAShapeLayer()
layer.frame = rect
layer.backgroundColor = NSColor.blue.withAlphaComponent(0.2).cgColor
layer.borderWidth = 1
layer.borderColor = NSColor.white.cgColor
$0.layer?.addSublayer(layer)
}
}
我有一个带有一些排除矩形的NSTextView,所以我可以垂直移动文本,而不必诉诸于字符串中。但是,我注意到排除矩形是......>
问题似乎是exclusionPath在第一行之前。
仅在参数周围玩耍,两行示例文本在第一行之后的rect y
位置正常工作。