【发布时间】:2015-02-28 14:20:13
【问题描述】:
我正在为 OS X 编写一个 Mail.app 风格的 Cocoa 应用程序,其中有 3 个窗格。我通过在另一个 NSSplitView 中嵌入一个 NSSplitView 来实现这一点。我试图模仿 Mail.app 的功能,当窗口大小调整为小于特定宽度时,它会自动折叠最左侧的窗格。我正在使用以下 NSWindowDelegate 方法进行此操作
- (NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)frameSize
我的这个方法的实现如下,但简而言之,当窗口被调整为更小时,左窗格确实像我想要的那样折叠但是在它折叠后应该允许窗口继续变小,但是踢球的是它没有。 我在此过程中返回的 NSSize 是正确的,但窗口未调整大小以匹配此值。我已检查以确保 NSWindow 没有任何其他最小大小限制。我被困住了。任何人都可以帮助我了解导致此问题的原因吗?
我的实现:
- (NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)frameSize
{
CGFloat minWidth;
if ([outerSplitView isSubviewCollapsed:leftPane])
{
minWidth = [outerSplitView dividerThickness] + MIDDLE_PANE_MINIMUM + [innerSplitView dividerThickness] + RIGHT_PANE_MINIMUM;
}
else
{
minWidth = LEFT_PANE_MINIMUM + [outerSplitView dividerThickness] + MIDDLE_PANE_MINIMUM + [innerSplitView dividerThickness] + RIGHT_PANE_MINIMUM;
}
if (![outerSplitView isSubviewCollapsed:leftPane])
{
// make sure the width is not smaller than current minimum width
// find the difference proposed size and current size
if (sender.frame.size.width - frameSize.width > LEFT_PANE_MINIMUM / 2.0 )
{
//Collapse the left pane. Don't modify framesize.
[outerSplitView setPosition:0.0 ofDividerAtIndex:0];
}
else if (frameSize.width < minWidth )
{
frameSize.width = minWidth;
}
}
else if (frameSize.width < minWidth)
{
frameSize.width = minWidth;
}
return frameSize;
}
【问题讨论】:
标签: objective-c cocoa nswindow