Вы можете сделать подкласс UIButton
и установить layer.cornerRadius
в layoutSubviews
.
class RoundButton: UIButton {
override func layoutSubviews() {
super.layoutSubviews()
layer.cornerRadius = bounds.height / 2
}
}
Вот простой пример, который можно протестировать на игровой площадке. Вы можете видеть, что радиус угла реагирует каждый раз, когда он меняет размер, нажав.
import UIKit
import PlaygroundSupport
class MyViewController: UIViewController {
private var button: RoundButton!
override func loadView() {
let view = UIView()
view.backgroundColor = .white
button = RoundButton()
button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)
button.translatesAutoresizingMaskIntoConstraints = false
button.addTarget(self, action: #selector(tapButton), for: .touchUpInside)
button.setTitle("Round", for: .normal)
button.backgroundColor = .red
view.addSubview(button)
NSLayoutConstraint.activate([
button.centerXAnchor.constraint(equalTo: view.centerXAnchor),
button.centerYAnchor.constraint(equalTo: view.centerYAnchor)
])
self.view = view
}
@objc private func tapButton(_ sender: Any) {
button.contentEdgeInsets.top += 5
button.contentEdgeInsets.bottom += 5
}
}
class RoundButton: UIButton {
override func layoutSubviews() {
super.layoutSubviews()
layer.cornerRadius = bounds.height / 2
}
}
PlaygroundPage.current.liveView = MyViewController()