Символ SF выглядит искаженным

При использовании новых символов SF на UIButton символы кажутся искаженными на моем iPhone 8, а на симуляторе iPhone 11 все в порядке. На iPhone 8 символы кажутся сдавленными по горизонтали, что делает его слишком высоким. Я сделал гифку, чтобы проиллюстрировать проблему. На гифке показаны переходы двух скриншотов. Один из 8 и один из 11:

Иллюстрация проблемы

Кто-нибудь еще сталкивался с этой проблемой? Что здесь происходит?

Редактировать:

Атрибуты IB. Кнопка ограничена всем для краев содержащего представления.

Редактировать № 2: Размер символа установлен правильно при указании шрифта для символа и масштаба "Большой". Пробовал SystemFont "Заголовок".

2 ответа

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

button.imageView?.contentMode = .scaleAspectFit

Информационный кружок на скриншоте ниже - это UIButton, использующий SF-символ info.circle.fill.

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

Изменить: см . Ответ fahlout для обходного пути с использованием contentMode представления изображения.

Как вы заметили, при обычном / среднем размере с размером шрифта 17pt некоторые символы отображаются не так, как ожидалось, а некоторые формы искажаются.

Некоторые наблюдения:

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

Вот визуальное сравнение circle символ (зеленый) в разных масштабах и размерах и контрольный круг, наложенный в Photoshop (красный):

  • Слева: Шрифт = Заголовок; Масштаб = не указан; Вес = не указан
  • Центр: Шрифт = Тело; Масштаб = не указан; Вес = не указан
  • Справа: шрифт = заголовок; Масштаб = Большой вес = Не указан

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

Я сделал проект, показывающий проблему: https://github.com/guillaumealgis/UIButton-SFSymbol-Squished

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

Изменить: см . Ответ fahlout для обходного пути с использованием contentMode представления изображения.

Вы также должны отправить отзыв в Apple, чтобы повысить шансы исправления этой ошибки! (мой - FB7461981, ребята из Apple)

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