gpt4 book ai didi

swift - 如何动态设置UIButton的圆角半径?

转载 作者:行者123 更新时间:2023-11-28 07:27:05 24 4
gpt4 key购买 nike

我在 Storyboard中有一个 UIButton,它会根据设备的当前方向自动调整大小。我对按钮有 1:1 宽高比限制,并且按钮的角半径应始终是其宽度的一半,以便它显示为圆形。

我尝试更新 viewDidLayoutSubviews 中的角半径,如下所示:

override func viewDidLayoutSubviews() {
bigButton.layer.cornerRadius = 0.5 * bigButton.bounds.size.width
}

我希望这会在调整大小后根据按钮的宽度更新角半径。我认为它实际上所做的是根据按钮之前的宽度更新角半径,导致其显示不正确。

是否有一种简单的方法可以在调整大小后获取按钮的宽度?或者有其他方法可以达到我想要的效果吗?感谢您的帮助!

最佳答案

您可以创建UIButton的子类,并在layoutSubviews中设置layer.cornerRadius

class RoundButton: UIButton {
override func layoutSubviews() {
super.layoutSubviews()

layer.cornerRadius = bounds.height / 2
}
}

这是一个可以在 Playground 中测试的简单示例。您可以看到,每次通过单击更改大小时,圆角半径都会发生 react 。

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()

关于swift - 如何动态设置UIButton的圆角半径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56275887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com