所有本机控件的父窗口处于活动状态或非活动状态时,其外观都不同。我们应该如何在自定义组件中检查此状态,例如在渲染按钮单元格时?
我们可以检查controlView.window
的属性,例如isMainWindow
和isKeyWindow
,但它们并不涵盖所有情况。例如,如果您在桌面上打开应用程序的一个窗口,而在全屏空间中打开另一个窗口,则根据公共API,其中只有一个可以是键或主键。但是,标准控件似乎使它们在两个空间中都处于活动状态:
[请注意,两个Safari窗口中的工具栏按钮如何呈现为活动状态。我们如何实现相同的行为?
幸运的是,SwiftUI允许从环境继承新的魔术属性:
/// Window state.
@Environment(\.controlActiveState)
var windowState: ControlActiveState
这是官方解决方案。干杯!