2014-01-23 50 views
0

我有一個自定義的NSView子類,我把它放在一個NSScrollView中,基本工作正常。它總是佔用其可用空間的全部寬度,所以它的約束佔據了滾動視圖的整個寬度。它佔用多少垂直空間取決於它需要顯示多少數據,因此它只能垂直滾動。這很好。在NSScrollView中自定義NSView,佔用整個可見空間

問題是,如果我的自定義視圖需要的空間少於它所在的NSScrollView空間,則它不會展開以填充可見區域。在數據量少於可見區域的情況下,我希望它向下擴展 - 以便空間可作爲拖放目標等等。

  • 我試過改變它的「擁抱優先權」。我試着添加一個約束來將底部保持在NSClipView的底部之下。我不能想出任何基於約束的解決方案來解決這個問題(儘管我還沒有排除這種可能性)。

  • 我試圖捕捉通知時NSScrollView改變大小,並調整自定義視圖的框架,如果是太小了,但(大概是因爲我只能改變其當前幀,而佈局系統完成所有佈局以後)我似乎也無法完成這項工作。

是否有將NSScrollView視圖添加到可見區域底部的技巧,只要它本來太短?它看起來應該是如此簡單,而且我之前完成了這個工作,我只是手動調用了-setFrame,但是一旦移動到自動佈局世界,該方法就會停止工作。

+0

您是否嘗試添加高度約束「yourView.height> = parentView.height」,其中parentView是clipview? 我有一個類似的問題,因爲你和以下爲我工作: myView.width> = clipview.width, myview.height> = clipview.height; 並擺脫IB錯誤: myview.centerXY = clipview.centerXY(在構建時刪除), 爲myview的intrinsicSize設置佔位符 –

回答

0

不知道你的限制和內容擁抱和內容壓縮實際上是什麼樣子...... 內容擁抱至少有一個邊緣對superview>>約束可能會這樣做,但你可能需要調整優先級。 您可能還需要確保已在自定義視圖類中實現了intrinsicContentSize,這會告訴內容擁抱和壓縮他們需要知道的內容。

+0

假設約束條件都是默認值,例如新的Xcode Cocoa應用程序,將NSScrollView在窗口中,創建一個新的NSView子類,將文檔視圖設置爲該類,然後運行。文檔視圖不會擴展到滾動視圖(如通過記錄它或者將其繪製爲'NSRectFill([self bounds])'),即使它具有「intrinsicContentSize」,甚至具有垂直擁抱優先級1 。 – Lonelyisland