2009-08-08 62 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; 
      } 
     } 
    } 
相關問題