我尝试在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];
但一切都失败了 任何人都可以提出任何建议吗?谢谢!
答案 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];
}
});
它适用于我的情况。