2014-01-02 4 views
0

Когда я пытаюсь использовать автоматическую раскладку так:Как использовать автоматическую компоновку программно?

CJGBoardLabels* labels = [CJGBoardLabels alloc]; 
[self.view insertSubview:labels aboveSubview:_mainBoard]; 
[_mainBoard addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[labels]|" options:NSLayoutFormatAlignAllCenterX metrics:nil views:NSDictionaryOfVariableBindings(labels)]]; 

Я получаю эту ошибку:

2014-01-02 16:51:05.141 chess[18050:70b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Requesting the window of a view (<CJGBoardLabels: 0xa6a8570; frame = (0 0; 0 0); transform = [0, 0, 0, 0, 0, 0]; alpha = 0; opaque = NO; layer = (null)>) with a nil layer. This view probably hasn't received initWithFrame: or initWithCoder:.' 

Что соответствующий способ программно использовать функцию автоматической компоновки без вызова initWithFrame? Или мне еще нужно вызвать initWithFrame?

ответ

1

Вы делаете

labels = [CJBoardLabels new]; 

или

labels = [[CJBoardLabels alloc] init]; 

или

labels = [[CJBoardLabels alloc] initWithFrame:CGRectZero]; 

В каждом случае следует (ВАЖНО)

labels.translatesAutoresizingMasksIntoConstraints = NO; 

Или, вы можете использовать my lovely auto layout category и использовать

labels = [CJBoardLabels autolayoutView]; 

, который делает выше для вас ... и много других вкусностей для создания ваших ограничений в коде.

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