2013-07-09 24 views
2

可以通過自動佈局約束來配置3個子視圖的splitview,就像在mail.app中一樣?我的意思是:當用戶調整窗口大小時,只有最右邊的子視圖改變它的大小,當用戶在最左側和中間子視圖之間拖動分隔線時,只有左側和右側子視圖改變其大小,並且當用戶拖動中間和右子視圖只有這些子視圖更改大小。 如果有可能怎麼做。 我認爲這個任務可能會受限制優先執行,但我很困惑。 謝謝!配置NSSplitView有三個子視圖像mail.app

+1

我不確定,但我懷疑它。我的應用程序有3個窗格(包含另一個分割視圖的分割視圖),我必須使用分割視圖委託方法才能控制(即限制)用戶調整大小。 – trojanfoe

+0

好主意。我想過這個問題。但我仍然認爲可以通過佈局約束來實現...... –

+1

鑑於'NSSplitView'正是爲此目的提供了一個委託(除其他外),我認爲你會*反對潮流*。 – trojanfoe

回答

0

我找到了一個不使用自動佈局約束的解決方案。我正在使用Rubymotion,因此我的解決方案使用Ruby,但可以在Objective-C中輕鬆轉換。

首先,爲了在用戶拖動左側和中間子視圖之間的分隔線時僅獲得左右子視圖的大小,我創建了兩個嵌套的NSSplitView,第二個嵌入到第一個的右側。

問題中提到的最後一點,也就是說when the user drags the divider between the middle and the right subviews only these subviews change sizeNSSplitView的默認行爲,因此在此處無所作爲。

最後,得到的只有最右邊的子視圖當用戶調整窗口大小改變它的大小,我實現了splitView:resizeSubviewsWithOldSize:的委託方法:

def splitView(splitView, resizeSubviewsWithOldSize:oldSize) 
    sv1 = splitView.subviews[0] 
    sv2 = splitView.subviews[1] 

    leftFrame = sv1.frame 
    rightFrame = sv2.frame 
    newFrame = splitView.frame 

    leftFrame.size.height = newFrame.size.height 
    rightFrame.size.height = newFrame.size.height 

    leftFrame.origin = NSMakePoint(0,0) 
    ## 1 is the NSSplitView divider width 
    rightFrame.size.width = newFrame.size.width - leftFrame.size.width - 1 
    rightFrame.origin.x = leftFrame.size.width + 1 

    sv1.setFrame(leftFrame) 
    sv2.setFrame(rightFrame) 
end 

,瞧! 我花了一段時間才使它工作,所以我希望它能爲其他人節省幾次時間。

0

使用自動佈局,您可以在NSSplitView中設置每個分隔線的保持優先級。 您可以使用委託方法或Xcode中的界面構建器在代碼中執行此操作。

相關問題