Размер изображения внутри UIButton - как получить согласованное поведение? - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь использовать UIB-кнопку с изображением и текстом (изображение слева, текст справа), где изображение всегда находится в гриппе sh слева и имеет размер, соответствующий высоте кнопки. Это работает для большинства iPhone версий, которые мне понравились (11 Pro Max, 11 Pro, 8, SE), за исключением iPhone 11, где изображение имеет поля над и под ним (кнопка имеет серый фон для ясности ):

iPhone 11

Для сравнения, на iPhone 8, например, кнопка выглядит как и ожидалось:

iPhone 8

Компоновка выглядит следующим образом:

  • Все кнопки расположены в вертикальном UIStackView с выравниванием, установленным на fill и распределение установлено на заполнить одинаково (представление стека полностью на экране, UIScrollView не задействован)
  • Вставки заголовка кнопки (только заголовок, а не изображения) настраиваются для изменения положения заголовка в середина свободного места справа от кнопки:
    let labelOffset = (bounds.width - imageView!.frame.width - titleLabel!.frame.width) / 2
    titleEdgeInsets = UIEdgeInsets(top: 0, left: labelOffset, bottom: 0, right: 0) 
  • Изображение @ 3x размер 593x640 (в случае важности, @ 2x 300x324)
  • Границы кнопок отображаются как: (0.0, 0.0, 394.0, 190.0)
  • Кадр ImageView отображается как: (0.0, 30.5, 125.0, 12 8.5)

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

Итак, вопросы

  • Чего мне не хватает по iPhone 11? Что управляет вертикальным размером imageView и как я могу надежно сказать кнопке разместить imageView в самом левом (без полей) без полей сверху и снизу для всех моделей iPhone? (В идеале, несмотря на то, что все еще можно рендерить изображение в соответствии с contentMode правилами)?

  • Каков «правильный» способ определения размера изображения для различных моделей iPhone? Например, я хотел бы иметь более узкое изображение на iPhone SE по сравнению с iPhone 8 (оба используют @ 2x изображения). Для меня изображения @ 2x и @ 3x на самом деле не решают проблему, поскольку существует много моделей с разным логическим разрешением, подходящих для одного и того же фактора @ .x Будучи iOS новичком ie, я упускаю здесь какие-то важные знания?

(режим рутины включен) То же самое BTW применяется к ограничениям - я в конечном итоге использовал взлом в Мое приложение для настройки константы, связанной с одним из ограничений, чтобы сделать позиционирование stackView более приятным на SE (константа «по умолчанию» выглядит хорошо на 11 и выше, выглядит хорошо на 8 и совершенно безобразна на SE). Этот хакерский подход выглядит некрасиво и вряд ли может быть хорошим стилем. Я знаком с классами размеров, но они, похоже, решают только очень грубую проблему соотношения сторон, а не более точные размеры устройств. Мое приложение очень простое c, но я постоянно испытываю соблазн иметь собственный набор ограничений и изображений для каждого устройства. Я уверен, что мое приложение вряд ли уникально в этом отношении, поэтому ясно, что должен быть лучший подход к работе с множеством форм-факторов менее болезненным способом!!

Любая помощь будет принята с благодарностью.

...