2009-08-08 61 views
2

我在底部视图中有一个带有NSScrollView的NSSplitView。问题是当我折叠,然后重新打开(取消折叠)底部视图时,滚动视图的高度超出该底部视图的高度,因此Scoll视图的顶部部分被剪切。我有我的滚动视图,我的分割视图设置为在IB中向所有方向自动调整大小。我是否需要在un-collapse之后调整该滚动视图的高度,或者我是否设置了调整大小的属性错误或其他内容?以下是裁剪图像的前后图像。如何在折叠NSSplitView后修复视图的高度?

崩溃之前:

alt text

崩溃后,重新开放(请注意在底部视图中的滚动条裁剪)

alt text

回答

0

我有同样的问题。使用BWToolkit的分割视图修复了它,这允许您确定每个视图的最大和最小高度。

+0

是的,这实际上是我最终做了什么。实际上在BWToolkit的分割视图中存在一些错误,但在版本1.2.5中已经修复 – Austin 2010-01-28 19:54:04

4

问题的事实,茎可可自动调整规则通过缩放从前一状态到当前状态的变化来工作。如果任何边距都为0,则由于缩放比例性质的原因,它们不会随着视图的增长而缩小。

解决此问题的典型方法是使用NSSplitView委托方法来防止拆分视图变小,然后使其闭合 - 这会在内部将折叠视图保持在最小尺寸。

这是链接到split view documentation。另外,如果您考虑用户体验,当您的视图大小低于某个特定点时,您的视图可能看起来非常糟糕 - 视图可能开始重叠,并且变得太小而不能显示其内容。添加此折叠折叠行为可解决这两个问题。

如果你想看到一个这样的例子,Mac OS X的Mail.app将它的内联消息视图捕捉到一定高度时关闭。你应该模仿这种行为。

0

你可以“重启” NSUserDefaults的通过的东西,可能是。有这样的事情作为NSSplitView Subview Frames等键,您可以向其中分配坐标,一拉0.000000, 0.000000, 0.000000, 720.000000, NO

0

虽然乔恩·赫斯能说明问题很好(只要子视图的宽度变为0,自动调整宽度的元素就会丢失自动调整信息),但并不是所有情况下都给出了解决方案。 限制宽度在我的情况下没有帮助,因为子视图可​​以折叠。

我管理以实现可接受的解决方案,通过实施SPLITVIEW委托方法-splitviewWillResizeSubviews:由子视图设置为保持一个最小宽度隐藏,而不是它收缩到零:

- (void)splitViewWillResizeSubviews:(NSNotification *)notification { 
     NSUInteger divider = [[[notification userInfo] valueForKey:@"NSSplitViewDividerIndex"] intValue]; 
     NSView *subview = nil; 
     if(divider == SPLITVIEW_DIVIDER_SIDEBAR) { 
      subview = (NSView*)[self.splitView.subviews objectAtIndex:SPLITVIEW_SIDEBAR_INDEX]; 
     } 
     if(subview) { 
      if(subview.frame.size.width < SPLITVIEW_MINIMUM_SIDEBAR_WIDTH) { 
       CGRect correctedFrame = subview.frame; 
       correctedFrame.size.width = SPLITVIEW_MINIMUM_SIDEBAR_WIDTH; 
       subview.frame = correctedFrame; 
       subview.hidden = YES; 
      } else { 
       subview.hidden = NO; 
      } 
     } 
    } 
相关问题