Угловой радиус UiButton не работает должным образом в iPhone 5s, используемом в UiButton CustomClass - PullRequest
2 голосов
/ 03 мая 2019

Я создал пользовательский класс для UIButton, но на устройствах с маленьким экраном, например, iPhone 5s cornerRadius не работает должным образом

Button looks Like This

Вы должны посмотреть поближе, чтобы увидеть, что UiButton cornerRadius не идеально округлено

class customRoundButton: UIButton
{
    override func awakeFromNib()
    {
        self.layer.cornerRadius = (self.layer.frame.height / 2)
        self.layer.borderColor = fontColor.defualtBlue.cgColor
        self.layer.borderWidth = 1
        self.layer.clipsToBounds = true
        self.layer.layoutIfNeeded()
    }
}

Ответы [ 3 ]

5 голосов
/ 03 мая 2019

Установка cornerRadius в awakeFromNib слишком рано.Вместо этого используйте layoutSubviews:

class CustomRoundButton: UIButton {

    override func awakeFromNib() {
        super.awakeFromNib()
        layer.borderColor = UIColor.blue.cgColor
        layer.borderWidth = 1
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        layer.cornerRadius = layer.frame.height / 2
    }

}
0 голосов
/ 03 мая 2019

Лучше использовать IBDesignable для этого:

@IBDesignable
class RoundedButton: UIButton {

    @IBInspectable var cornerRadius: CGFloat = 3.0 {
        didSet {
            self.layer.cornerRadius = cornerRadius
        }
    }

    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
        self.setupView()
    }

    override func awakeFromNib() {
        super.awakeFromNib()
        self.setupView()
    }

    func setupView() {
        self.layer.masksToBounds = false
        self.layer.cornerRadius = cornerRadius
    }
}
0 голосов
/ 03 мая 2019

Попробуйте

override func layoutSubviews() {
        super.layoutSubviews()
        self.layer.cornerRadius = self.bounds.height * 0.50    
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...