2009-12-22 62 views
0

我遇到的問題必須與可可的座標系統,但我真的不知道。這一切都發生在水平NSSplitView的頂部窗格中。重新定位水平NSSplitView的頂部窗格中的NSBox

很簡單,我試圖在第二個下面放置一個NSBox(我將自定義視圖加載到框中 - 所有工作正常)。頂部框的左上角位於窗格的左上角,從不改變。如果頂部NSBox的高度縮小,我希望第二個NSBox的頂部向下滑動。相反,如果頂部NSBox's高度增加,我想底部NSBox下滑。

該代碼被調用兩次。盒子是正確的(第一次頂盒,第二次底盒)和v是正確的(這是我加載到框中的視圖 - 這工作正常,這是什麼導致高度在頂盒中改變)。

NSSize destBoxSize = [[box contentView] frame].size; //the size of the box in the view to load the view into 
NSSize newViewSize = [v frame].size; // the size of the view to be loaded 

float deltaWidth = [horizSplitView frame].size.width - destBoxSize.width; 
float deltaHeight = newViewSize.height - destBoxSize.height; 
NSRect boxFrame = [box frame]; 
boxFrame.size.height += deltaHeight; 
boxFrame.size.width += deltaWidth; 
boxFrame.origin.y -= deltaHeight; 

NSLog(@"vc=%@ boxFrame x%f y%f h%f w%f", nibName, boxFrame.origin.x, boxFrame.origin.y, boxFrame.size.height, boxFrame.size.width); 

// Clear the box for resizing 
[box setContentView:nil]; 
[box setContentView:v]; 
[box setFrame:boxFrame]; 
+0

如果您爲代碼的每一行添加四個空格,則會突出顯示;這樣就更容易閱讀它,並在其他詞之間看到它。 – kiamlaluno 2009-12-22 04:56:26

+0

「我試圖在第二個下面放置一個NSBox(我將自定義視圖加載到框中 - 所有工作都正常)。 ...如果頂部NSBox的高度收縮,我希望第二個NSBox的頂部向下滑動。相反,如果頂部NSBox的高度增加,我想讓底部的NSBox滑下來。「你的意思是下部框的高度永遠不變?那麼什麼填補了空間? – 2009-12-22 05:32:30

+0

請用代碼按鈕(101 010)格式化您的代碼。只需選擇代碼(包含註釋),剪下它,單擊編輯器的代碼按鈕,然後再次將代碼粘貼到「在此處輸入代碼」的位置。 – 2009-12-22 11:44:58

回答

0

你想要做什麼並不難,但它會需要一些子類。首先,你需要繼承NSSplitView,要麼和重寫或者 - (無效)init或 - (無效)awakeFromNib添加此行:

[self setAutoresizesSubviews:YES]; // 

然後,你需要繼承兩個箱子,並設置其自動調整大小在 - (void)init或in - (void)viewWillMoveToSuperview中:(NSView *)newSuperView。 對於第一個框,你可能會想:

[newInstance setAutoresizingMask:NSViewNotSizable]; 

因爲你可能會想第二BBOX:

[newInstance setAutoresizingMask:NSViewMinXMargin | NSViewMinYMargin]; 

NSView見。需要一些實驗來獲得正確的組合,但是它的工作原理非常好。