2016-02-10 5 views
1

Я создал вертикальный NSStackView, который содержит два подкласса NSView (это просто NSViews, которые рисуют фоновый цвет). У меня есть набор стека, чтобы отключить скрытые виды. Я установил одно из видов, которые будут скрыты.Скрытый вид в NSStackView не скрывается?

Ни один вид не скрывается в представлении стека.

Чтобы убедиться, что я не сумасшедший, я также создал два из тех же NSViews рядом друг с другом, спрятав один. Конечно, скрывается.

Распределение представлений стека установлено на Fill пропорционально (не так, как кажется).

В IB поведение кажется правильным; один из видов скрывается.

Мне, должно быть, не хватает чего-то невероятно очевидного здесь, не так ли?

enter image description here

В случае уместно, NSView подкласс: #import "ViewWithBackgroundColor.h"

@implementation ViewWithBackgroundColor 

- (void)drawRect:(NSRect)dirtyRect { 
    [super drawRect:dirtyRect]; 
    [self.backgroundColor set]; 
    [NSBezierPath fillRect:dirtyRect]; 
    if(self.bottomBorderColor != nil) { 
     NSBezierPath *linePath = [[NSBezierPath alloc] init]; 
     [self.bottomBorderColor set]; 
     linePath.lineWidth = 2.0; 
     [linePath moveToPoint:NSMakePoint(0, 0)]; 
     [linePath lineToPoint:NSMakePoint(dirtyRect.size.width, 0)]; 
     [linePath stroke]; 
    } 

} 

- (NSColor *) backgroundColor { 
    if (_backgroundColor) { 
     return _backgroundColor; 
    } else { 
     return [NSColor clearColor]; 
    } 
} 

@end 

ответ

4

Это выглядит как вопрос с IB и вид стека (пожалуйста, отчет об ошибке если вы уже этого не сделали).

Чтобы обойти его можно либо:

  • Не скрывайте кнопку в IB, и установить его будет скрыт во время выполнения.

или

  • Снимают «Отсоединяет скрытые представления» вид стека свойства в IB (видимый в вашем скриншоте), и установить его во время выполнения с -[NSStackView setDetachesHiddenViews:].
+1

Устанавливается «скрытый» код. Интересно, что если я делаю пустой проект с помощью Storiesboards и помещаю те же взгляды в контроллер моего представления, я не получаю ошибку (что странно, потому что приложение, с которым я столкнулся, находится в раскадровке). – Aaron