我正在测试现有应用程序如何在 Mojave 上运行,我发现布局存在奇怪的问题。关闭然后重新打开窗口工具栏的可见性使工具栏出现在内容的顶部,而不是向下推。
片段:
CustomPopUp *popup = [CustomPopUp popup];
__weak CustomRevealViewController *rev = self.revealViewController;
__weak NSWindow *window = self.view.window;
// Called when user taps in the popup view
[popup setCloseAction:^(BOOL success){
[rev removeOverlayController];
// !!! After this layout breaks
[window.toolbar setVisible:YES];
}];
[window.toolbar setVisible:NO];
[self.revealViewController showOverlayController:popup];
知道什么可能导致问题以及如何解决吗?
编辑1:
我在这里创建了一个简单的项目。
重现步骤:
- 使用 Xcode 10 beta 运行项目(需要 Mac OSX Mojave)
- 按“隐藏工具栏”按钮。这将隐藏工具栏并更新按钮标题。
- 按“显示工具栏”
结果:
工具栏看起来坏了。它在控制器之上。
预期结果:
它应该像在任何其他操作系统版本上一样工作。控制器的顶部约束应向下移动。
编辑2:
也许我在macOS 10.14 beta 的 AppKit 发行说明中的 Layer -Backed Views部分找到了线索。
在重绘祖先、后代或相交的兄弟姐妹时隐含依赖重绘的视图可能不会被重绘。和以前一样,如果需要重绘视图,请将其 needsDisplay 属性设置为 YES。从 WantUpdateLayer 返回 YES 的视图通常会被赋予一个独占层,即使视图的 WantLayer 属性设置为 NO。面向 macOS 10.14 的应用程序应该更喜欢 wantUpdateLayer 属性而不是 WantLayer 属性。
我仍然不确定如何解决它。
编辑 3: 随着 Mojave 的正式发布,这不再是一个问题。谢谢你,我真的很感谢你的帮助。