Режим содержимого UIButton ImageView не работает

Я только что запустил приложение для iOS в Swift, я делаю дизайн программно (я имею в виду, что я не использую раскадровку)

У меня есть UIButton с изображением внутри, я бы хотел, чтобы изображение заполнило всю кнопку. Прямо сейчас он просто показывает изображение в моей кнопке, но меньше, чем кнопка, в центре верхней части рамки кнопки.

Мой код:

    let buttonLocation = UIButton(frame: CGRect(x: 0, y: 0, width: buttonRoundedSize, height: buttonRoundedSize))
    buttonLocation.setImage(UIImage(named: "locate_button"), for: .normal)
    buttonLocation.backgroundColor = .white
    buttonLocation.layer.cornerRadius = frame.width / 2
    buttonLocation.myExtension()

Вот что я пробовал (ни один из тезисов не работал):

    self.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    self.autoresizingMask = .flexibleWidth
    self.autoresizingMask = .flexibleHeight
    self.imageView?.contentMode = .scaleAspectFill

Если я просто поставлю строку contentMode, это тоже не сработает. ImageView не возвращает ноль, который я проверял.

Спасибо!


person Quentin Rth    schedule 24.05.2019    source источник
comment
попробуйте buttonLocation.contentMode = .scaleAspectFit   -  person Ben Rockey    schedule 24.05.2019
comment
используйте 1_   -  person Rocky    schedule 24.05.2019
comment
@BenRockey это не работает   -  person Quentin Rth    schedule 24.05.2019
comment
Попробуйте установить режим содержимого объекта imageView внутри кнопки. Бывший. buttonLocation.imageView?.contentMode = .scaleAspectFill   -  person BhargavR    schedule 24.05.2019
comment
@BhargavR тоже не работает :( И я также пробовал setBackgroundImage, и у меня точно такая же проблема   -  person Quentin Rth    schedule 24.05.2019


Ответы (4)


Установите contentMode из buttonLocation's imageView как scaleAspectFill или scaleToFill, чтобы покрыть все frame из button.

let buttonLocation = UIButton(frame: CGRect(x: 0, y: 0, width: 200, height: 500))
buttonLocation.setImage(UIImage(named: "image"), for: .normal)
buttonLocation.backgroundColor = .gray
buttonLocation.layer.cornerRadius = buttonLocation.frame.width / 2
buttonLocation.imageView?.contentMode = .scaleAspectFill //Here........

Пример:

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

person PGDev    schedule 24.05.2019
comment
Именно так я и делаю, как вы можете видеть в моем первом посте, и это не работает. - person Quentin Rth; 24.05.2019

вам нужно использовать свойство setBackgroundImage вместо setImage.

buttonLocation.setBackgroundImage(UIImage(named: "locate_button"), for: .normal)
person Samir Shaikh    schedule 24.05.2019
comment
Та же проблема с setBackgroundImage вместо setImage - person Quentin Rth; 24.05.2019

Возможно, это может помочь вам:

let buttonLocation = UIButton(type: .custom)
buttonLocation.frame = CGRect(x: 0, y: 0, width: buttonRoundedSize, height: buttonRoundedSize)
buttonLocation.setImage(UIImage(named: "locate_button"), for: .normal)
buttonLocation.imageView?.contentMode = .scaleAspectFill
buttonLocation.contentHorizontalAlignment = .fill
buttonLocation.contentVerticalAlignment = .fill
buttonLocation.backgroundColor = .white
buttonLocation.layer.cornerRadius = frame.width / 2
buttonLocation.clipsToBounds = true

Вам нужно добавить свойства contentHorizontalAlignment и contentVerticalAlignment и не забудьте установить для clipsToBounds значение true, чтобы увидеть эффект углового радиуса.

person riza milani    schedule 24.05.2019
comment
Та же проблема, даже со всем этим - person Quentin Rth; 24.05.2019
comment
Что вы называете внутри myExtension(). Попробуйте удалить imageEdgeInsets и повторите попытку. - person riza milani; 24.05.2019

Попробуйте использовать приведенный ниже код и удалите другие свойства, которые устанавливаются для этой кнопки:

let buttonLocation = UIButton(frame: CGRect(x: 50, y: 50, width: 100, height: 100))
        buttonLocation.setImage(UIImage(named: "cat"), for: .normal)
        buttonLocation.backgroundColor = .white
        buttonLocation.layer.cornerRadius = 50
        buttonLocation.imageView?.contentMode = .scaleAspectFill
        buttonLocation.clipsToBounds = true

        self.view.addSubview(buttonLocation)

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

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

Вы можете прокомментировать, если это не ваш ожидаемый результат.

Надеюсь это поможет.

person BhargavR    schedule 24.05.2019
comment
Это все еще не работает, и размер моего изображения больше, чем размер расстегнутой кнопки, поэтому я действительно не понимаю, почему это не работает... - person Quentin Rth; 27.05.2019