使用自动布局时在 MacOS 上隐藏状态栏

Hiding status bar on MacOS when using Auto Layout

我正在寻找一种在使用 auto-layout 时隐藏 window 状态栏的方法。

这是处理更改状态栏的代码:

- (void)adjustStatusBar
{
    NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
    NSRect scrollViewRect;
    BOOL statusBar = [defaults boolForKey: TSSTStatusbarVisible];
    if(statusBar)
    {
        scrollViewRect = [[[self window] contentView] frame];
        scrollViewRect = NSMakeRect(NSMinX(scrollViewRect),
                                    NSMinY(scrollViewRect) + 23,
                                    NSWidth(scrollViewRect),
                                    NSHeight(scrollViewRect) - 23);
        [[self window] setContentBorderThickness: 23 forEdge: NSMinYEdge];
        [pageScrollView setFrame: scrollViewRect];
        [progressBar setHidden: NO];
        [self resizeWindow];
    }
    else
    {
        scrollViewRect = [[[self window] contentView] frame];
        [progressBar setHidden: YES];
        [pageScrollView setFrame: scrollViewRect];
        [[self window] setContentBorderThickness: 0 forEdge: NSMinYEdge];
        [self resizeWindow];
    }
}

但这是状态栏关闭时的样子:

状态栏所在的位置仍然可见。需要做些什么才能使状态栏消失的地方消失?

当自动布局处于活动状态时,您不能使用 -setFrame。最简单的方法是使用 NSStackView.detachesHiddenViews = YES。现在您只需隐藏您的状态栏,堆栈视图会负责移除它并展开滚动视图。