#ios #swift #size-classes
#iOS #swift #классы размеров
Вопрос:
Я пытаюсь понять, как использовать UITraitCollection
программно, но мне трудно разобраться в этом. Я разрабатываю для iPad retina в iOS 8.
println(self.traitCollection)
возвращает следующий вывод:
<UITraitCollection: 0x10df4c7f0; _UITraitNameUserInterfaceIdiom = Pad,
_UITraitNameDisplayScale = 2.000000, _UITraitNameHorizontalSizeClass = Regular,
_UITraitNameVerticalSizeClass = Regular, _UITraitNameTouchLevel = 0,
_UITraitNameInteractionModel = 1>
Что довольно просто.
Но когда я затем поворачиваю экран, я получаю точно такой же результат. Т.Е. Тот же класс вертикального размера и тот же класс горизонтального размера.
Итак, мой вопрос в том, нужно ли мне указывать класс размера, который я хочу для каждой ориентации устройства (насколько я вижу, классы размера доступны только для чтения!), Или я упускаю что-то очевидное? В примере, приведенном в докладе «Что нового в Cocoa-Touch» на видеосайте WWDC 2014, он использует iPhone в качестве примера, который имеет разные классы размеров по вертикали / горизонтали для каждой ориентации устройства.
Как бы вы поступили по этому поводу?
Комментарии:
1. Это имеет смысл, потому что iPad имеет обычный класс размеров как для горизонтального, так и для вертикального, поэтому он не будет меняться при вращении. Однако для iPhone это изменится. На iPad класс размера может изменяться при использовании контроллеров с разделенным просмотром или, вероятно, будущей функции режима разделения экрана
2. Тогда я, должно быть, неправильно понял концепцию классов размеров. Как мой интерфейс узнает, что устройство было повернуто, и соответствующим образом изменит содержимое? Т.Е. Изображения из каталога ресурсов и т. Д.
3. Классы размера предназначены для «детализированных» изменений. Понятие
rotated device
исчезло в iOS 8, когда вы поворачиваете, ваш VC просто получит изменение границ (на iPad). Если вы действительно хотите обнаружить поворот, вы можете проверить, что высота и ширина поменялись местами.4. Я бы порекомендовал вам посмотреть соответствующие видео с WWDC :]
5. Круто, это прояснило @JackWu. Но предполагается ли, что вы вручную устанавливаете изображение (допустим, нам нужно установить фоновое изображение) для портрета и для ландшафта с изменением границ?
Ответ №1:
В этом документе (перейдите к Унифицированным раскадровкам для универсальных приложений) объясняются классы размеров как для iPad, так и для iPhone.
Обратите внимание, что iPhone немного сложнее. Все iPad являются обычными-x-обычными в любой ориентации, но классы размеров iPhone меняются в зависимости от ориентации: от обычного (h)-x-Compact (w) в портретной ориентации до Compact-x-Compact в альбомной ориентации.
По слухам, объяснение всех этих изменений заключается в том, что Apple, возможно, скоро представит больше разрешений экрана, а текущее число уже требует набора if-then без этих классов размеров. Чтобы облегчить этот переход, я бы рекомендовал подумать о таких вещах, как адаптивный веб-дизайн, где вы определяете несколько общих макетов, а затем растягиваете их, чтобы они идеально подходили к любому точному размеру в одном из этих макетов.
Редактировать:
1) В случае разрыва ссылки найдите документ Apple «Что нового в iOS», перейдите в раздел iOS8 и найдите «Поддержка новых размеров и масштабов экрана»
2) iPhone 6 имеет обычную ширину в альбомном режиме.