1

我正在测试现有应用程序如何在 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:

我在这里创建了一个简单的项目。

重现步骤:

  1. 使用 Xcode 10 beta 运行项目(需要 Mac OSX Mojave)
  2. 按“隐藏工具栏”按钮。这将隐藏工具栏并更新按钮标题。
  3. 按“显示工具栏”

结果:

工具栏看起来坏了。它在控制器之上。

预期结果:

它应该像在任何其他操作系统版本上一样工作。控制器的顶部约束应向下移动。

编辑2:

也许我在macOS 10.14 beta 的 AppKit 发行说明中的​​ Layer -Backed Views部分找到了线索。

在重绘祖先、后代或相交的兄弟姐妹时隐含依赖重绘的视图可能不会被重绘。和以前一样,如果需要重绘视图,请将其 needsDisplay 属性设置为 YES。从 WantUpdateLayer 返回 YES 的视图通常会被赋予一个独占层,即使视图的 WantLayer 属性设置为 NO。面向 macOS 10.14 的应用程序应该更喜欢 wantUpdateLayer 属性而不是 WantLayer 属性。

我仍然不确定如何解决它。

编辑 3: 随着 Mojave 的正式发布,这不再是一个问题。谢谢你,我真的很感谢你的帮助。

4

1 回答 1

0

我有一个类似的问题。我有一个没有工具栏的弹出窗口,然后我将其淡出并显示另一个带有工具栏的窗口。

带有工具栏的窗口在 Mojave 官方版本中的布局被破坏(视图出现在工具栏下方)。为了修复它,我隐藏然后再次显示窗口的工具栏:

- (void)viewWillAppear
{
    [super viewWillAppear];
    if (_firstTime) {
        _firstTime = NO;
        NSWindow *window = self.view.window;

        window.toolbar.visible = NO;
        window.toolbar.visible = YES;
    }
 }
于 2018-10-22T13:30:26.357 回答