2014-02-15 5 views
0

У меня есть довольно простой пользовательский класс представления, который содержится внутри NSSplitView. Этот класс представления сам по себе добавляет NSMatrix и пару фиктивных ячеек. Действительно странно то, что, несмотря на то, что размер заполнен, он на самом деле значительно выше и шире, чем супервизор. Я попытался зарегистрировать фрейм и рамки, результаты ниже, но я в тупике. Почему этот размер не зависит от его надзора, как я ожидал?NSMatrix чертеж за пределами границ

Launches like this Looks like this when I resize

- (id)initWithFrame:(NSRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     NSImageCell *prototypeCell = [[NSImageCell alloc] init]; 
     [prototypeCell setBordered:YES]; 

     _matrix = [[NSMatrix alloc] initWithFrame:self.bounds 
              mode:NSHighlightModeMatrix 
             prototype:prototypeCell 
            numberOfRows:1 
            numberOfColumns:1]; 

     [_matrix setCellSize:NSMakeSize(50, 50)]; 

     [_matrix setBackgroundColor:[NSColor redColor]]; 
     _matrix.drawsBackground = YES; 

     [_matrix addRow]; 

     NSCell *cell = [_matrix cellAtRow:0 column:0]; 
     [cell setImage:[NSImage imageNamed:@"block.png"]]; 

     cell = [_matrix cellAtRow:1 column:0]; 
     [cell setImage:[NSImage imageNamed:@"block.png"]]; 

     [self addSubview:_matrix]; 

     NSLog(@"%@", NSStringFromRect(self.bounds)); 
     NSLog(@"%@", NSStringFromRect(self.frame)); 
     NSLog(@"%@", NSStringFromRect(_matrix.bounds)); 
     NSLog(@"%@", NSStringFromRect(_matrix.frame)); 
    } 
    return self; 
} 

Output: 
2014-02-15 15:16:23.458 Temp[5970:303] {{0, 0}, {45, 331}} 
2014-02-15 15:16:23.459 Temp[5970:303] {{500, 0}, {45, 331}} 
2014-02-15 15:16:23.459 Temp[5970:303] {{0, 0}, {45, 331}} 
2014-02-15 15:16:23.459 Temp[5970:303] {{0, 0}, {45, 331}} 

ответ

0

Вы не создали ни autolayout ограничений или старомодные пружины-н-распорки, чтобы сохранить вашу матрицу наклеивания к краям его родительского вида ,

Мое подозрение, что вы работаете с восстановлением состояния, поэтому запуск родительского представления создается с одним размером, затем состояние восстанавливается, а размер окна/splitView изменяется, а subview больше не соответствует его родительскому.

В общем, если вы создаете представление самостоятельно, немедленно добавьте ограничения (или вызовите -setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable [в этом случае], если вы не используете автозапуск).

+0

Вы абсолютно правы .. Я вытащил это, пытаясь преследовать другие проблемы, и забыл повторно вставить .. Спасибо! – XeroxDucati

Смежные вопросы