Нужно ли использовать 2 Storyboard для универсального приложения?

У меня есть проект для iPhone и iPad. IPad нужен контроллер с разделенным видом. Мы создаем две отдельные раскадровки? Один для iPhone (с помощью autolayout мы можем поддерживать все устройства) и два для iPad. Я сомневаюсь, что разница это только в первоначальном виде. Внутренние взгляды повторяются. Каким будет ваш подход к раскадровке?

6 ответов

Больше не нужно две раскадровки в iOS 8! Мы можем использовать Adaptive UI, чтобы адаптировать одну и ту же раскадровку к разным размерам iPad и iPhone.

Вы можете найти хороший учебник здесь http://www.raywenderlich.com/83276/beginning-adaptive-layout-tutorial

А также вы можете найти хорошее видео от apple на конференции WWDC здесь и найти "Создание адаптивных приложений с UIKit"

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

И это все возможные классы размеров в iOS 8 (я взял изображение с https://medium.com/@getaaron/ios-8-development-tips-for-iphone-6-and-iwatch-1c772554ffe0)

Для iOS 7 и более ранних версий - да, используйте две раскадровки и два совершенно разных интерфейса, поскольку на iPhone нет контроллера с разделенным видом.

Для iOS 8 используйте одну раскадровку и используйте UISplitViewController на iPad и iPhone. Создайте новый проект из универсальной версии шаблона приложения Xcode 6 Master-Detail, чтобы узнать, как это работает! Это автоматически разделенный контроллер просмотра на iPad и навигационный интерфейс на iPhone.

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

В качестве бонуса, если вы работаете с Mac низкого уровня, таким как MacBook Air или старый Mac, это также сократит время загрузки и улучшит скорость отклика при работе с раскадровкой.

В iOS 8 вам не нужны две раскадровки, поскольку одна раскадровка может работать как с iPhone, так и с iPad; Кроме того, UISplitViewController поддерживается на телефоне в этой ОС.

Для более ранних выпусков iOS вам понадобятся две раскадровки.

Мне удалось реализовать этот сценарий (сплит-контроллер в универсальной раскадровке, которая работает как на iOS8, так и на iOS7), вызвав другой переход на iOS7 и iPhone. Мой сценарий таков:

У меня есть контроллер входа в систему, который должен перейти на главный контроллер (модально).

Когда на iOS8 или iPad я использую переходные точки к контроллеру разделенного представления, тогда как на iOS7-iPhone я использую другой переход, который указывает непосредственно на левый навигационный контроллер разделенного контроллера (обходя его полностью).

Если с левого контроллера у вас есть переход к деталям, который указывает на правый навигационный контроллер (и вы должны это сделать), и если тип перехода - "Показать детали" (и он должен), то он будет работать как обычный пуш в iOS7-iPhone. среда (что именно то, что мы хотим).

Однако я заметил, что контроллер назначения подробного сегмента в сценарии IOS7-iPhone становится корневым контроллером правой навигационной панели (даже если переход указывает на навигационную панель), поэтому, если у вас есть некоторый код в prepareForSegue Возможно, вам придется адаптировать его, чтобы обрабатывать их по-разному)

(Для определения, является ли платформа IOS8, и если я на iPhone/iPad идиома, я использую стандарт

[[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0 and UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)

Вы можете иметь гораздо больше, чем просто две раскадровки. Если вы не можете использовать классы размеров / автоматическое расположение для выполнения работы контроллера представления, совместно используемого iPhone и iPad, вы можете разделить эту часть на отдельные раскадровки. Затем вы можете создать третью раскадровку, которая содержит контроллеры представления, которые являются общими. Затем вы можете создать экземпляр этой раскадровки в коде и использовать ее для создания экземпляров своих контроллеров представления.

Другие вопросы по тегам