У меня есть пара UIButton, и в IB они настроены на Aspect Fit, но по какой-то причине они всегда растягиваются. Вам нужно что-то еще установить? Я перепробовал все разные режимы просмотра, и ни один из них не работает, все растягиваются.
ios
iphone
uibutton
aspect-fit
Марти
источник
источник
Ответы:
У меня была такая проблема раньше. Я решил это, поместив свое изображение в
UIImageView
, гдеcontentMode
настройки действительно работают, и поместивUIButton
поверх него прозрачный пользовательский .РЕДАКТИРОВАТЬ: этот ответ устарел. См. Ответ @Werner Altewischer для правильного ответа в современных версиях iOS.
источник
Решение состоит в том, чтобы установить свойство
contentMode
вimageView
свойствеUIButton
.UIButton
Должен быть создан с помощью пользовательского типа для этой работы я считаю , ( в противном случаеnil
возвращается для этого свойства).источник
[button.imageView setContentMode:UIViewContentModeScaleAspectFit];
button.imageView!.contentMode = UIViewContentMode.scaleAspectFit
Этот метод мне очень понравился:
В Xib выберите кнопку и установите
user defined runtime attributes
:self.imageView.contentMode
Number
1
источник
extension UIButton { @IBInspectable var imageContentMode: Int { get {return imageView?.contentMode.rawValue ?? 0} set {imageView?.contentMode = UIViewContentMode(rawValue: newValue) ?? .scaleAspectFit} } }
imageView.contentMode
у меня работало!Если вы делаете это в Interface Builder, вы можете использовать инспектор атрибутов среды выполнения, чтобы установить это напрямую без какого-либо кода.
Задайте для ключевого пути на кнопке значение «imageView.contentMode» с типом «Число» и значением «1» (или любым другим режимом, который вам нужен).
источник
Используйте кнопку imageView для contentMode. Не прямо на самой кнопке.
источник
Если вы поместите изображение
UIImageView
позади кнопки, вы потеряете встроенную функциональностьUIButton
класса, такую какadjustsImageWhenHighlighted
иadjustsImageWhenDisabled
, и, конечно же, возможность устанавливать разные изображения для разных состояний (без необходимости делать это самостоятельно).Если мы хотим, чтобы изображение не было растянутым для всех состояний управления , одна из возможностей - получить изображение с помощью
imageWithCGImage:scale:orientation
, как в следующем методе:Чтобы реализовать это, мы должны написать:
Это должно предотвратить растяжение изображения во всех состояниях управления. Это сработало для меня, но дайте мне знать, если это не так!
ПРИМЕЧАНИЕ. Здесь мы обращаемся к проблеме, относящейся к тому
UIButton
, чтоinsideButton:
может бытьinsideView:
, или к чему бы вы ни хотели вписать изображение.источник
У меня была эта проблема некоторое время назад. Проблема, с которой я столкнулся, заключалась в том, что я пытался применить этот эффект к фоновому UIButton, который ограничен и, следовательно, означает, что вы не можете настроить его так просто.
Хитрость заключается в том, чтобы установить его как просто изображение, а затем применить технику @ayreguitar, и это должно исправить!
источник
Это сработало для меня
Спасибо @ayreguitar за его комментарий
источник
Вот быстрый альтернативный ответ:
источник
Объединение нескольких разных ответов в одно решение - создайте кнопку с настраиваемым типом, установите для кнопки свойство imageView contentMode и установите изображение для кнопки (не фоновое изображение, которое по-прежнему будет масштабироваться для заполнения).
источник
источник
Этот ответ основан на ответе @ WernerAltewischer .
Чтобы не подключать мою кнопку к IBOutlet для выполнения кода на нем, я создал подклассы класса UIButton:
Теперь создайте пользовательскую кнопку в своем xib и установите ее изображение (а не фоновое изображение):
Затем установите его класс:
Готово!
Вместо
вашего баттона аспекта изображения приступе теперь , как и ожидалось:
источник
ios 12. Также необходимо добавить контент Alignment
источник
У меня были проблемы с тем, что изображение не менялось пропорционально, поэтому я исправил его с помощью вставок по краям.
источник
Режимы содержимого UIView применяются к соответствующему «содержимому» CALayer. Это работает для
UIImageView
s, потому что они устанавливают соответствующийCALayer
контентCGImage
.drawRect:
в конечном итоге отображает содержимое слоя.Пользовательский
UIButton
(насколько мне известно) не имеет содержимого (кнопки в стиле прямоугольника с закругленными углами могут отображаться с использованием содержимого). У кнопки есть подвиды: фонUIImageView
, изображениеUIImageView
и заголовокUILabel
. Установка дляcontentMode
вложенных представлений может делать то, что вы хотите, но возиться сUIButton
иерархией представлений - это немного недопустимо.источник
Смена
UIButton.imageView.contentMode
не сработала.Я решил проблему, установив для изображения свойство «Фон».
Вы можете добавить ограничение соотношения, если вам нужно
источник
Это перекрывает многие другие ответы, но решение для меня заключалось в том, чтобы
contentMode
изUIImageView
за кнопки на.ScaleAspectFit
- которые либо может быть сделано в «User Defined выполнения Атрибуты» в Interface Builder (то есть.self.imageView.contentMode
, номер, 1) или вUIButton
подклассе;источник
Вы можете использовать imageWithCGImage, как показано выше (но без отсутствующих скобок).
Кроме того ... миллионы телефонов, не поддерживающих 4.0, вообще не будут работать с этим кодом.
источник
[button sizeToFit]
работал у меня.источник
Как и @Guillaume, я создал подкласс UIButton как Swift-файл. Затем установите мой собственный класс в Интерфейсном Разработчике:
.
И вот файл Swift:
источник
У меня была такая же проблема, но я не мог заставить ее работать (возможно, это ошибка SDK).
В конце концов, как обходной путь, я поместил
UIImageView
за своей кнопкой и установилUIButton
для нее нужные параметры, а затем просто поместил поверх нее пробел .источник