2013-05-27 1 views
1

Я борюсь с Autolayout (используя его в первый раз в новом приложении).Проблемы с AutoLayout

Следующая ситуация:

  • Раскадровка
  • IPad
  • Autolayout включена

В одном поповере мне нужно повторно верстке 8 кнопок программно в соответствии с выбором пользователя. Это прекрасно работает до момента, когда кнопки должны быть повернуты на 180 ° (для просмотра вверх ногами, что является функцией приложения).

Как только я добавлю код для вращения, ретранслятор больше не работает. Я не понимаю, почему я могу изменить положение кнопок (например, Case 2), но затем, когда он вращается, он больше не работает.

Дело 1:

BUTTON 0 | КНОПКА 1 | КНОПКА 2 | BUTTON 3
BUTTON 4 | КНОПКА 5 | КНОПКА 6 | КНОПКА 7

Случай 2:

КНОПКА 7 | КНОПКА 6 | КНОПКА 5 | КНОПКА 4
BUTTON 3 | КНОПКА 2 | КНОПКА 1 | BUTTON 1
(все кнопки повернуты на 180 °, т.е. перевернуты вверх ногами)

После того, как AutoLayout выключен, он работает как шарм. Проблема в том, что, как только я выключу AutoLayout, остальная часть приложения полностью завинчена.

Было бы здорово, если бы кто-нибудь помог мне понять эту проблему.

Код в viewDidAppear

for (UIButton *button in self.allButtons) { 

    if (button.tag == i) { 

     button.transform = CGAffineTransformMakeRotation(M_PI); 

     button.frame = CGRectMake((300 - (100 * currentButtonPosition)) + offsetWidthButton, offsetHeightButton, 100, 100); 
     NSLog(@"Button Tag Nr: %d\nFrame:\nX=%f\nY=%f\nW=%f\nH=%f",button.tag, button.frame.origin.x, button.frame.origin.y, button.frame.size.width, button.frame.size.height); 

        } 

       } 

Фрейм координаты кнопки все правильно на выходе NSLog. Я думаю, что как-то кнопка.transform закручивает часть .frame = CGRectMake, но почему я не понимаю и с нетерпением жду вашей помощи или руководства, где можно продолжить изучение загадочного автозапуска.

Надежда объяснение понятно :-)

Спасибо и имеют хороший день Ронни

+0

Что произойдет, если вы не используете какой-либо из этого кода в 'viewDidAppear'? Я не понимаю, зачем вам это нужно. – trojanfoe

+0

В зависимости от того, что пользователь выбирает в настройках, есть - например - только 5 кнопок и с разными порядками. Вот почему мне нужно переупорядочить их программно. Например, это будет КНОПКА 1 | КНОПКА 3 | КНОПКА 5 | КНОПКА 6 | BUTTON 7 –

ответ

1

Если вы используете autolayout вы должны изменять ограничения, не устанавливая рамку кнопки.

  • Это отличный стартер на autolayout из Стэнфорда: 8. Autolayout and Navigation (January 31, 2013)
  • Вот good tutorial на использовании autolayout в Interface Builder.
  • Вот несколько вопросов, которые показывают, как добавлять ограничения программно here, here и here.
+0

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

+0

@ MR-Apps Нет проблем, рад, что у вас это работает. Autolayout немного запутанно начинать с! –

1

Ошибка или неожиданное поведение немного улучшилось в последней версии Xcode, но она по-прежнему беспорядочна. Например, вы по-прежнему не можете отключать AutoLayout на одном XIB независимо от последствий, хотя флажки на других не изменяются при изменении на одном.

То, что вы хотите сделать следующее:

перед выключением Автокомпоновки, набор кадров в соответствии с ограничениями во всех видах, удалить все ограничения во всех видах в приложении, а затем отключить авто макетов.

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

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