Пользовательские интерфейсы для портретного и ландшафтного режима iOS - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь расположить пользовательский интерфейс по-разному для книжной и альбомной ориентации.Разница заключается в следующем:

  1. У меня мало UIStackViews.Некоторые их оси становятся горизонтальными в альбомной ориентации, но вертикальными в портретном режиме,

  2. Порядок кнопок в UIStackView может различаться в обоих режимах,

  3. Кнопка, которая добавляется в subview1 в альбомной ориентации, должна быть удалена и добавлена ​​в subview2 в альбомной ориентации.subview1 может вообще отсутствовать в портретном режиме,

  4. В обоих режимах ограничения автопоставки различны.

Я начал с варьировать для чертв XCode, но, кажется, есть ограничения.Я вручную переключаю ограничения в коде при наблюдении за изменениями коллекции признаков (viewWillTransition: ...), но это кажется неуклюжим.Есть ли лучший способ или лучший способ - иметь дубликаты наборов элементов управления для обоих режимов и скрывать те, которые не нужны в альбомном / портретном режимах?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

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

Имеет 2 разных UIStackView, один дляпейзаж и другой для портрета.

Добавление вариантов в свойство построителя интерфейса installed для признаков.Таким образом, одновременно будет установлен только один из двух UIStackView.

Для каждого UIButton добавления события подключите его к соответствующему IBAction или selector.Это будет работать, даже если есть 2 кнопки, которые делают то же самое.

Что касается ваших проблем:

  1. Сам axis не изменится, но это будет работать, потому что там 'Для версии 2 UIStackView.
  2. Вы можете расположить кнопку на каждой UIStackView.
  3. Просто добавьте кнопки, где хотите, на каждую UIStackView.
  4. Установите ограничения по своему усмотрению в зависимости от того, над каким UIStackView вы работаете.

Я что-то упустил?обновите свой вопрос, предоставив больше информации, чтобы люди могли помочь вам лучше.

0 голосов
/ 07 декабря 2018

Что я сделал, так это соблюдение UIDevice.orientationDidChangeNotification и обновление обязательных ограничений для достижения разных макетов, как вы уже реализовали.И я думаю, что это лучший способ решить проблему и никогда не пытаться и даже не думать о создании разных представлений для каждой ориентации ??‍♂️ .

Участие в условиях:

  • Первое условие требует только соответствующей установки свойства axis.
  • Порядок arrangedSubviews является частью дизайна, и, следовательно, доразработчик переставил их вручную, если он / она должен.
  • В этой части я хотел бы сделать следующее: removeFromSuperview() кнопку и addSubview(view:) из одного подпредставления в другое.
  • Это делается автоматически, пока мы активируем ограничения для одной ориентации и деактивируем другие, система обновляет пользовательский интерфейс без каких-либо проблем.

Самое важное - это сделатьУбедитесь, что при удалении подпредставлений все ограничения, связанные с ним, будут удалены, или приложение будет аварийно завершено.

...