在Mac应用中,我正在显示一个包含NSPredicateEditor的工作表:
let predicateEditor = // from storyboard
parentViewController.presentAsSheet(predicateEditor)
在macOS 10.14 Mojave中,这导致许多UI错误:
is
背景和文本字段的背景:如何在Mojave中修复这些以表格形式显示的NSPredicateEditor错误?
错误报告:
答案 0 :(得分:2)
默认情况下,NSPredicateEditor的祖父母视图应为NSScrollView:
如果为该滚动视图提供clearColor透明背景,则主要的深色模式问题将在很大程度上得到解决。如果您在光照模式下将此alpha更改保持活动状态,则谓词编辑器将假定白色背景,而不是默认的灰色视图背景。
As Apple says,请在layout()
或其他方法之一中进行此更改,以使您的视图在系统外观更改时有机会自行更新。
class NSPredicateEditorDarkModeFix: NSPredicateEditor {
override func layout() {
defer { super.layout() }
guard let clipView = self.superview as? NSClipView, let scrollView = clipView.superview as? NSScrollView else {
return
}
let alpha: CGFloat = NSAppearance.current.name == .darkAqua ? 0.0 : 1.0
scrollView.backgroundColor = scrollView.backgroundColor.withAlphaComponent(alpha)
}
}
黑暗模式NSPredicateEditor仍然会出现一些UI问题,即每个控件的灰色背景框架。
此处的Omni Show播客中讨论了此修复程序:
https://theomnishow.omnigroup.com/episode/rey-worthington-omnigraffle-engineer https://twitter.com/theomnishow/status/1052630270719868928
答案 1 :(得分:1)
此答案修复了NSPredicate编辑器控件的微妙背景色,如下所示:
将视觉效果视图using a flipped coordinate system插入“谓词编辑器”视图层次结构。翻转的VEV应该存在于NSClipView和NSPredicateEditor之间。
然后添加自动布局约束,如下所示。请勿约束VEV的底部或高度锚点。
注意:
设置scrollView.documentView = flippedVEV
可修复滚动。
如果您不使用isFlipped
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 ),
])
}
}
}
答案 2 :(得分:0)
Apple已回复了我的错误报告,并表示此行为已通过Xcode的最新更新得到解决。
表格提供的NSPredicateEditor在黑暗模式下完全损坏
rdar:// 46142171
Apple开发人员关系
要修复黑暗模式的外观,应将scollview背景色重置为默认值
我
您是说对Mojave进行了更新吗?
需要使用scrollview clearcolor背景才能使NSPredicateEditor在黑暗模式下全部可用。
Apple开发人员关系
否,在Xcode中,您需要将scollview背景颜色更改为其默认值(
controlBackgroundColor
)我
好的,我发现在切换(返回)到
controlBackgroundColor
之后,这种行为现在大部分都可以了。又名删除我的clearColor修复程序但是,过去在选择该颜色时,这绝对是行不通的。您能否提供有关何时在OS X或Xcode中修复该问题的任何信息?
Apple开发人员关系
此问题已在Xcode中修复