2009-12-22 5 views
0

У меня проблема, связанная с системой координат в Cocoa, но я действительно не знаю. Все это происходит в верхней панели горизонтальной линии NSSplitView.Переместить NSBox в верхнюю панель горизонтального NSSplitView

Очень просто, я пытаюсь позиционировать один 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

+0

«Я пытаюсь расположить один NSBox прямо под вторым (я загружаю пользовательские представления в коробки - все работает отлично). ... Если высота верхнего NSBox сжимается, я хочу, чтобы верхняя часть второго NSBox скользила прямо под ним. И наоборот, если высота верхней NSBox возрастает, я хочу, чтобы нижний NSBox скользил вниз. «Вы имеете в виду, что высота нижней коробки никогда не меняется? Что же заполняет пространство? –

+0

Пожалуйста, отформатируйте код с помощью кнопки кода (101 010). Просто выберите код (с комментариями), вырежьте его, нажмите кнопку кода редактора и снова вставьте код, где говорится: «Введите код здесь». –

ответ

0

Что вы хотите сделать, это не так сложно, но для этого потребуется подклассификация. Прежде всего, вам нужно подкласс NSSplitView и либо и переопределить либо - (Недействительными) инициализации или - (Недействительными) awakeFromNib добавить эту строку:

[self setAutoresizesSubviews:YES]; // 

Затем вам нужно подкласс две коробки и установить их автоматическое изменение размеров маски, либо in - (void) init, либо in - (void) viewWillMoveToSuperview: (NSView *) newSuperView. Для первой коробки вы, вероятно, хотите:

[newInstance setAutoresizingMask:NSViewNotSizable]; 

Для второго BBOX вы, вероятно, хотите:

[newInstance setAutoresizingMask:NSViewMinXMargin | NSViewMinYMargin]; 

Смотрите также NSView. Требуется немного экспериментировать, чтобы получить правильную комбинацию, но тогда она работает довольно хорошо.