У меня есть пользовательский UIButton, чтобы иметь закругленные края

import UIKit

class RoundedButton: UIButton {

    override init(frame: CGRect) {

        super.init(frame: frame)

        self.layer.cornerRadius = self.bounds.width * 0.5
        self.backgroundColor = UIColor(patternImage: UIImage(named: "map.png")!)
        self.setTitleColor(UIColor.white, for: UIControlState.normal)
    }

    required init?(coder aDecoder: NSCoder) {

        super.init(coder: aDecoder)

        self.layer.cornerRadius = self.bounds.width * 0.5
        self.backgroundColor = UIColor(patternImage: UIImage(named: "map.png")!)
        self.setTitleColor(UIColor.white, for: UIControlState.normal)
    }

}

Теперь я использую этот «RoundedButton» (размер 110, 110) в файле XIB UIViewcontroller, и ограничения установлены для поддержания соотношения сторон с представлением UIViewcontrollers.

Кнопка выглядит округленной в симуляторах iPhone, но кнопка НЕ округляется в симуляторе iPad. Когда я устанавливаю свойство layer.cornerRadius в viewDidAppear, кнопка округляется в симуляторе iPad.

Пожалуйста, смотрите изображения

enter image description here

enter image description here

Я ищу альтернативное решение, чем переопределение радиуса угла слоя снова в viewDidappear.

Спасибо

0
slysid 22 Окт 2017 в 14:23

3 ответа

Лучший ответ

Переопределить функцию layoutSubviews:

import UIKit

class RoundedButton: UIButton {

    override init(frame: CGRect) {
        super.init(frame: frame)

        self.backgroundColor = UIColor(patternImage: UIImage(named: "map.png")!)
        self.setTitleColor(UIColor.white, for: UIControlState.normal)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        self.backgroundColor = UIColor(patternImage: UIImage(named: "map.png")!)
        self.setTitleColor(UIColor.white, for: UIControlState.normal)
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        self.layer.cornerRadius = self.bounds.width * 0.5
    }
}
0
Francesco Deliro 22 Окт 2017 в 11:35

Переопределить метод layoutSubviews следующим образом:

override func layoutSubviews() {
    super.layoutSubviews()
    self.layer.cornerRadius = self.bounds.width * 0.5
}

Также вы можете удалить строку cornerRadius из init

Для получения дополнительной информации см. Документацию UIView: https://developer.apple.com/ документация / UIKit / UIView / 1622482 - layoutsubviews

1
Michał Kwiecień 22 Окт 2017 в 11:30
import UIKit

class RoundedButton: UIButton {

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.setTitleColor(UIColor.white, for: UIControlState.normal)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.setTitleColor(UIColor.white, for: UIControlState.normal)
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        self.layer.cornerRadius = self.bounds.width / 2
    }
}

Я также создал пример кода для вас. RoundedButton

0
Usman 22 Окт 2017 в 12:14