这个答案修复了 NSPredicate 编辑器控件的微妙错误的背景颜色,如下所示:
将使用翻转坐标系的视觉效果视图插入到谓词编辑器视图层次结构中。翻转的 VEV 应该存在于 NSClipView 和 NSPredicateEditor 之间。
然后添加自动布局约束,如下所示。不要限制 VEV 的底部或高度锚。
笔记:
class FlippedVEV: NSVisualEffectView {
override var isFlipped: Bool { return true }
}
class PredicateEditorViewController: NSViewController {
@IBOutlet weak var predicateEditor: NSPredicateEditor!
override func viewDidLoad() {
super.viewDidLoad()
if let clipView = predicateEditor.superview as? NSClipView, let scrollView = clipView.superview as? NSScrollView {
let flippedVEV = FlippedVEV(frame: predicateEditor.frame)
flippedVEV.material = .sheet
predicateEditor.removeFromSuperview()
flippedVEV.addSubview(predicateEditor)
clipView.addSubview(flippedVEV)
scrollView.documentView = flippedVEV
flippedVEV.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
flippedVEV.leadingAnchor .constraint(equalTo:predicateEditor.leadingAnchor ),
flippedVEV.trailingAnchor.constraint(equalTo:predicateEditor.trailingAnchor),
flippedVEV.topAnchor .constraint(equalTo:predicateEditor.topAnchor ),
flippedVEV.bottomAnchor .constraint(equalTo:predicateEditor.bottomAnchor ),
clipView.leadingAnchor .constraint(equalTo:flippedVEV .leadingAnchor ),
clipView.trailingAnchor .constraint(equalTo:flippedVEV .trailingAnchor),
clipView.topAnchor .constraint(equalTo:flippedVEV .topAnchor ),
])
}
}
}