Как центрировать изображение внутри UIButton без растяжения в обоих направлениях в Swift?

Я создаю пользовательскую клавиатуру, и мне нужно сосредоточить изображение значка сдвига внутри кнопки смены. Изображение 100px x 100px.

Однако рамка кнопки в портрете 36pt x 38pt, а в пейзаже - 68pt x 32pt. Я попытался использовать свойство вставки образа кнопки, чтобы центрировать изображение. Однако это не так.

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

shiftButton.setImage(UIImage(named: "shift"), forState: .Normal)

shiftButton.imageEdgeInsets = UIEdgeInsetsMake(0,0,0,0)

Я делаю кнопку программно. И мне нужна кнопка для масштабирования, сохраняющая ее соотношение сторон, то есть 1:1. Его максимальная ширина или высота всегда привязаны к самой высоте кнопки. Ширина/высота изображения должна быть максимальной высоты кнопки. И он не должен растягиваться, чтобы исказить значок. Однако сама кнопка может растягиваться.

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

Любые предложения по решению этой проблемы?

Ответ 1

Наконец, появилось решение. Вы должны установить режим содержимого для изображения внутри UIButton.

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

shiftButton.contentMode = .Center
shiftButton.imageView?.contentMode = .ScaleAspectFit

Ответ 2

  • Добавьте пользовательские атрибуты времени выполнения к вашей кнопке.

На снимке экрана ниже значение 1 равно scaleAspectFit

imageView.ContentMode = scaleAspectFit

enter image description here enter image description here

Ответ 3

Установите для режима содержимого кнопки значение Center:

shiftButton.contentMode = .Center

Ответ 4

Мне удалось центрировать изображение, установив вставки содержимого в 0, используя инспектор размера на раскадровке:

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

Ответ 5

Если вы используете раскадровку, дважды проверьте, что для заголовка кнопки ничего не установлено.