Классы размера Xcode 6

Я хотел бы задать вопрос по очень запутанной (по крайней мере для меня) теме - Классы размеров в Xcode 6. Я пытался получить полное представление о том, как все это работает, но мне все еще не ясно.

До Xcode 6 и новых айфонов все было очень просто. To, Non-Retina и Retina, дисплеи, которые позволяли нам всегда работать с одним и тем же разрешением 320x480 (или 568 для более высоких устройств). Стандартные и @2x активы имели смысл. Теперь, однако, у нас есть большие экраны с тем же соотношением (почти то же самое), но рабочая область уже не та.

Предполагается, что классы размера позволяют разместить все это в одной раскадровке. Но подождите. iPhone 6 использует активы @2x, что, как я понимаю, означает, что графика на этом устройстве будет выглядеть меньше, чем на iPhone 5/5S. И iPhone 6 Plus использует активы @3x, которые снова не будут выглядеть так же. Похоже, невозможно сделать, например, чтобы определенная кнопка всегда была одного размера по отношению, скажем, к полной ширине экрана. Если мы, конечно, не запрограммируем это, но это сделало бы классы размеров бесполезными.

Я правильно понимаю или что-то упускаю? Было бы здорово услышать, как вы все это видите. Может быть, вы знаете хорошие уроки? Я не нашел ничего, что могло бы объяснить мои сомнения.

Заранее спасибо!


person konrad.bajtyngier    schedule 20.10.2014    source источник
comment
Ты понял. Это то, что я должен был сделать. Вручную увеличивайте / уменьшайте кнопки с помощью кода в зависимости от того, какой это iPhone. Как вы заметили, кнопка, которая выглядела идеально в симуляторе iPhone 5/6, в iPhone 6 plus выглядит жалкой. Отсюда дилемма   -  person Sam B    schedule 20.10.2014
comment
Спасибо за комментарий, Сэм. Похоже, что с iPhone 6 будет много проблем, и нет разумного способа создания макетов в Interface Builder, если только точные размеры и интервалы не очень важны. Напоминает андроид :)   -  person konrad.bajtyngier    schedule 20.10.2014


Ответы (2)


Вы можете сделать многое из того, о чем вы здесь говорите, используя комбинацию различных подходов:

  1. Классы размеров для различных типов устройств, чтобы учесть наиболее масштабные изменения в конфигурации пользовательского интерфейса (например, различия между iPad и iPhone). Вы можете использовать это, например, чтобы изменить отображение боковой панели.

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

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

  4. Изображения с изменяемым размером: теперь вы можете указать области с изменяемым размером в изображениях, чтобы контролировать, как они растягиваются при применении к таким вещам, как UIButtons и т. д., которые могут изменять размер в соответствии с правилами Autolayout. (Эта функция уже давно присутствует в Android, поэтому она приветствуется на iOS.) Это означает, что вы можете сделать так, чтобы вещи хорошо выглядели на экранах самых разных размеров, не имея столько отдельных изображений или точного контроля над размером. элементов пользовательского интерфейса.

  5. Программный код в контроллерах представления для настройки всего, чего вы не можете достичь другим способом.

Хотя это правда, что у вас нет столь тонкого контроля над тем, какие устройства показывают, какой именно макет с классами размера, я обнаружил, что это не такая большая проблема, как вы могли подумать, поскольку классы размера позволяют вашим контроллерам представления очень легко адаптироваться к различным устройствам. Комбинация классов autolayout и size особенно эффективна. И на самом деле это потенциально хорошо, потому что это означает меньше новой ручной настройки всякий раз, когда Apple предлагает другой размер экрана. Сейчас немного сложно конвертировать, но, вероятно, оно того стоит в долгосрочной перспективе. Вам просто нужно подумать о том, как вы настраиваете вещи немного по-другому. Это немного больше похоже на Android, где им уже давно приходится бороться с множеством разных размеров и разрешений экрана устройств, но это также своего рода естественная эволюция платформы, где вы не можете точно спроектировать для каждого отдельного физического устройства. с практической точки зрения (вы все равно должны протестировать их в симуляторе).

person mnemia    schedule 14.01.2015
comment
эй, очень хорошие моменты! большое спасибо, что все это перечислили! - person konrad.bajtyngier; 06.02.2015

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

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

person gnasher729    schedule 25.02.2016