Нарушение ограничения автоматической выдачи iOS при изменении ориентации устройства - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть макет автоматической разметки, который был создан для iPhone в портретном режиме.

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

enter image description here

Я считаю, что обнаружил нарушающее ограничение (выделено ниже), и оно созданоiOS, перемещение моего ограничения, которое находится в конфликте, нарушает мой макет и вызывает больше ошибок нарушения ограничений.

Макет работает визуально;до тех пор, пока я игнорирую предупреждение.

Компоновка состоит из двух основных частей: элементов управления (с использованием UIStackView, что составляет 30% от высоты устройства) и UITableView, который заполняетоставшаяся площадь.Они встроены в UIStackView, который настроен на покрытие по умолчанию UIView с полями в безопасной зоне.

enter image description here

Для наилучшего использованиядоступного пространства экрана, когда устройство поворачивается в горизонтальное положение, часть управления должна располагаться над UITableView рядом с ним и занимать 45% ширины экрана.

Конфликтующее ограничениена части «контроллер» вида, устанавливающей его передний край равным 16 точкам от переднего края суперпредставлений.

Можно ли обойти это?Мне тоже не нравится, но можно ли проигнорировать предупреждение?

Я попытался встроить основной UIStackView в UIView и удалить ограничение, которое находится в конфликте;но он вызывает другие проблемы, если я не добавлю ограничения между UIView и UIStackView, которые затем имеют ту же проблему конфликтующих ограничений.

Можно найти репозиторий для примера проекта с той же проблемой в .

При упрощении макета кажется, что я не могу иметь UIStackView с Alignment = Fill, Distribution = Fill Equally и Spacing = 5 (или стандартным интервалом) в качестве интервала на UIStackView по-видимому.в конфликте.

1 Ответ

1 голос
/ 11 апреля 2019

Эти типы предупреждений об ограничениях часто встречаются при использовании Vary for Traits.

Вы можете избавиться от конфликтов ограничений при вращении, изменив Priority обоих ваших пропорциональных ограничений на Info Stack View на 999.

Когда я запускаю ваше приложение Experiment, я также вижу конфликт ограничений на вашем Detail Stack View ... но он выглядит как внутренний конфликт, от которого вы, возможно, не сможете избавиться. Изменение этого вида стека Distribution на Fill Equally вместо Fill Proportionally очищает его, но это может не дать вам точный макет, который вы ищете.

Fill Proportionally представляется наиболее неправильно понятым и неправильно используемым параметром ... Я бы предложил изменить ваш макет, чтобы избежать этого ... Возможно, вставив Detail Stack View в UIView, Distribution: Fill и ограничив его быть сосредоточенным на этом UIView.

...