Я успешно создал приложение, работающее на 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]];