Можете ли вы использовать AutoLayout в сочетании с UISplitViewController?

Я успешно создал приложение, работающее на iPhone (с чертой Компактная ширина), которое использует UISplitViewController для реализации меню в левой части экрана. Он широко использует раскадровку (с 23 представлениями / единицами) вместе с AutoLayout. Я стремлюсь к функциональности, аналогичной приложению Gmail и многим другим.

введите здесь описание изображения

Когда меню отображается в портретном режиме, оно занимает 80% экрана, оставляя Детальный/Вторичный вид все еще видимым, но занимая только 20% экрана. Я достиг этого, используя viewWillLayoutSubviews и viewWillTransitionToSize, чтобы установить splitViewController.preferredPrimaryColumnWidthFraction = 0,8;

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

введите здесь описание изображения

Итак, мой вопрос заключается в следующем: возможно ли использовать AutoLayout в UISplitViewController без создания эффекта сжатия? Я уверен, что это так, так что же мне не хватает, что мне нужно сделать, чтобы обмануть систему AutoLayout, чтобы она не сжимала макет, а вместо этого просто сдвинула его из поля зрения?

дополнение: на приведенном выше снимке экрана вторичное представление с синей панелью навигации — это SettingsTableViewController.m. Этот код не содержал никаких ограничений NSLayoutConstraints, как и связанная часть Main.storyboard. Следуя предложению в комментариях: я не смог найти способ во всплывающем меню «Добавить новое ограничение» в Main.storyboard, чтобы выбрать суперпредставление, чтобы иметь возможность добавить ограничение «Равная ширина» в «Таблица». ".

введите здесь описание изображения

Поэтому в качестве альтернативы я добавил следующий код в метод viewDidLoad в SettingsTableViewController.m, но это не дало никакого эффекта.

self.view.superview addConstraint:[NSLayoutConstraint constraintWithItem:self.view
                                                                attribute:NSLayoutAttributeWidth
                                                                relatedBy:NSLayoutRelationEqual
                                                                   toItem:self.view.superview
                                                                attribute:NSLayoutAttributeWidth
                                                               multiplier:1
                                                                 constant:0]];

person Steve    schedule 16.06.2016    source источник


Ответы (1)


Не уменьшать ширину основного вида. Вы должны просто сместить основной вид вправо.

person Savchenko Dmitry    schedule 16.06.2016
comment
Как я могу это сделать? Нигде в моем коде я не устанавливаю и не изменяю ширину основного вида напрямую. Его ширина устанавливается автоматически как следствие того, что основное = подробное/дополнительное представление встроено в UISplitViewController. Как заставить его смещаться вправо? - person Steve; 17.06.2016
comment
@Steve, удалите конечное ограничение для основного вида и сделайте ширину основного вида равной (1: 1) супервиду. - person Savchenko Dmitry; 17.06.2016
comment
Спасибо за ваше предложение, я пробовал, но безуспешно. Я обновил свой вопрос, чтобы объяснить, что я сделал. - person Steve; 18.06.2016