标题&&关闭按钮未显示

时间:2014-12-19 05:38:24

标签: macos cocoa nswindow osx-yosemite

我尝试在cocoa app中显示/隐藏标题栏。我使用以下代码:


    if ([window styleMask]==NSResizableWindowMask) {
        [window setStyleMask:NSMiniaturizableWindowMask|NSClosableWindowMask|NSResizableWindowMask|NSTitledWindowMask];
    }else{
        [window setStyleMask:NSResizableWindowMask];
    }

它在10.10之前运作良好但在10.10中失败。在10.10中,当显示标题栏时,未显示标题,关闭/最小化/调整大小按钮。只有用户调整窗口大小,才会显示这些内容 我想有些东西需要'Flush',因此我也尝试添加:


    [window update];
    [window display];
    [[NSApplication sharedApplication] setWindowsNeedUpdate:YES];
    [[NSApplication sharedApplication] updateWindows];

但一切都失败了 任何人都可以提出任何建议吗?谢谢!

2 个答案:

答案 0 :(得分:0)

这是一个有趣的问题。您可以向Apple提交错误报告吗?

与此同时,这是一个似乎解决问题的黑客攻击:

if ([window styleMask] == NSResizableWindowMask) {
    NSDisableScreenUpdates();

    [window setStyleMask:(NSMiniaturizableWindowMask|NSClosableWindowMask
                           |NSResizableWindowMask|NSTitledWindowMask)];

    NSRect frame = [window frame];
    frame.size.width += 1;
    [window setFrame:frame display:NO];
    frame.size.width -= 1;
    [window setFrame:frame display:YES];

    NSEnableScreenUpdates();
} else {
    [window setStyleMask:NSResizableWindowMask];
}

(此外,您似乎必须使用setTitle:手动恢复标题。)

答案 1 :(得分:0)

使用

dispatch_async(dispatch_get_main_queue(), ^{
    if ([window styleMask]==NSResizableWindowMask)
    {
        [window setStyleMask:NSMiniaturizableWindowMask|NSClosableWindowMask|NSResizableWindowMask|NSTitledWindowMask];
    }
    else
    {
        [window setStyleMask:NSResizableWindowMask];
    }
});

它适用于我的情况。