Один и тот же фрагмент изображения отображается по-разному на 8 и 8 PLUS

#ios #xcode #interface-builder #xcasset

#iOS #xcode #конструктор интерфейса #xcasset

Вопрос:

Вот пример проекта

Проблема

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

И для достижения этого я использую фрагмент изображения в Assets.xcassets. Изображение может быть изменено должным образом, однако в разных размерах оно отображается немного по-разному.

Исходное изображение

Снимок экрана 1

Фрагмент изображения

Просто нарежьте изображение от вертикального центра.

Скриншот 2
Снимок экрана 3

Раскадровка

Режим содержимого настроен на масштабирование для заполнения

Ограничение по высоте равно ограничению по ширине, умноженному на 0,8

Снимок экрана 4
Снимок экрана 5

Результат

Я думаю, что он должен отображать почти одинаковые изображения на разных устройствах. Потому что все одинаково, за исключением ресурсов изображения (2x, 3x).

Однако результат не такой, как я ожидал. Изображение кажется немного сжатым на iPhone 8 PLUS.

Снимок экрана 6

Наконец-то

Я использую Mojave с Xcode 10.1 (10B61).

Кто-нибудь знает, в чем причина. И как правильно растянуть изображение по вертикали?

Ответ №1:

Причина, по которой он выглядит «сжатым», заключается в том, что изображение растягивается горизонтально.

Ваш фрагмент позволяет сохранять постоянную высоту верхней части, но не постоянную (или пропорциональную) ширину.

Здесь я использую ваше исходное изображение без каких-либо фрагментов… каждый вид изображения имеет одинаковую высоту (201 пункт), поэтому вы знаете, что оно масштабируется не по вертикали, а по разной ширине, поэтому вы можете видеть результат горизонтального растяжения:

введите описание изображения здесь

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