2013-05-28 8 views
0

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

У меня есть раскадровка (которая еще не использует автоматическую компоновку) со сценой, имеющей выпадающий вид прокрутки. У меня также есть 2 XIB, которые я создаю в коде. Первый XIB (A) имеет UILabel и общий номер UIView. Второй XIB (B) имеет только 5 UIButton s в + компоновке. Конечная цель - загрузить B в общий вид в A (по горизонтали и по умолчанию) под меткой) и сделать A взятием всей страницы в прокрутке.

Когда я изменяю размер представления XIB A, размер общего вида расширяется и сжимается, но всегда остается значением по умолчанию ниже метки. Когда я изменяю размер представления XIB B, расположение кнопок остается центрированным (это то, что я хочу). Это поведение, которое я хочу.

С помощью следующего кода, однако, он не работает:

View A *viewA = [[ViewA alloc] initWithFrame:CGRectZero]; 
viewA.textLabel.text = @"A label with a rather long text"; 

ViewB *viewB = [[ViewB alloc] initWithFrame:CGRectZero]; 

[viewA setTranslatesAutoresizingMaskIntoConstraints:NO]; 
[viewB setTranslatesAutoresizingMaskIntoConstraints:NO]; 

[viewA.customView addSubview:viewB]; // customView is the generic view 

Это дает мне следующее:

enter image description here

(Белая область является вид прокрутки, красная область вид A, вид зеленой зоны B.)

Я попытался добавить ограничение, которое должно позволить виду B взять всю ширину своего супервизора:

[viewA.customView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[viewB]|" options:0 metrics:0 views:NSDictionaryOfVariableBindings(viewB)]]; 

Но это приводит к следующим образом:

enter image description here

Что я могу сделать, чтобы получить кнопки, сосредоточенные в зеленой зоне? Мне все равно, если зеленая зона полностью покрыта красной областью, или если красная область просто сосредоточена над зеленой зоной.

ответ

0

Вы упомянули, что не используете автоматическую компоновку в xib, поэтому я предполагаю, что добавление ограничений в код имеет нулевой эффект. Вы должны попробовать использовать соответствующие AutoresisingMasks для представлений, добавленных в код. Попытайтесь использовать Auto-Layout (правильно) в xibs, если нет веской причины не делать этого.

Ниже приведен пример маски, вам нужно выяснить, какие из них вам нужны, на самом деле не можете сказать по вашему примеру.

yourView.translatesAutoresizingMaskIntoConstraints = NO; 
[yourView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight]; 
+0

Авто-макет включен в XIB, но раскадровка по-прежнему работает на распорках и пружинах. –

+0

Вы проверили, соответствует ли рамка вашего зеленого вида нужного размера, она выходит за пределы видимой области, а кнопки, возможно, центрированы – ceekay

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