我刚开始学习iOS开发,找不到如何制作简单的圆形按钮。我找到旧版本的资源。我需要为按钮设置自定义背景吗?在 Android 中,我只会使用 9 补丁,但我知道 iOS 没有此功能。
https://i.stack.imgur.com/kpJ2X.png
简短回答:是的
您绝对可以制作一个简单的圆形按钮,而无需额外的背景图像或为此编写任何代码。只需按照下面给出的屏幕截图,设置按钮的运行时属性,以获得所需的结果。
它不会显示在 Storyboard
中,但在您运行项目时会正常工作。
https://i.stack.imgur.com/cjlXS.png
注意:
'Key Path' layer.cornerRadius
,值为5。该值需要根据按钮的高度和宽度来改变。它的公式是按钮的高度 * 0.50。因此,围绕该值在模拟器或物理设备上查看预期的圆形按钮。当故事板中有多个按钮要四舍五入时,此过程看起来很乏味。
你可以这样做:
@IBDesignable class MyButton: UIButton
{
override func layoutSubviews() {
super.layoutSubviews()
updateCornerRadius()
}
@IBInspectable var rounded: Bool = false {
didSet {
updateCornerRadius()
}
}
func updateCornerRadius() {
layer.cornerRadius = rounded ? frame.size.height / 2 : 0
}
}
在 Identity Inspector
中将类设置为 MyButton
,在 IB 中您将拥有 rounded
属性:
https://i.stack.imgur.com/IP6fA.png
layer.masksToBounds = true
要在情节提要中执行此操作,您需要为按钮使用图像。
或者,您可以在代码中执行此操作:
btn.layer.cornerRadius = 10
btn.clipsToBounds = true
创建一个 Cocoa Touch 类。
https://i.stack.imgur.com/4teeZ.png
在 RoundButton 类中插入代码。导入 UIKit @IBDesignable 类 RoundButton: UIButton { @IBInspectable var cornerRadius: CGFloat = 0{ didSet{ self.layer.cornerRadius = cornerRadius } } @IBInspectable var borderWidth: CGFloat = 0{ didSet{ self.layer.borderWidth = borderWidth } } @ IBInspectable var borderColor: UIColor = UIColor.clear{ didSet{ self.layer.borderColor = borderColor.cgColor } } } 参考图片。
https://i.stack.imgur.com/uTIiT.png
我发现最简单的方法是将cornerRadius设置为视图高度的一半。
button.layer.cornerRadius = button.bounds.size.height/2
Xcode 13 添加了一个通过调整角样式属性(在 BackgroundConfiguration 下)来执行此操作的选项。
必须在 Background Config 中配置背景,然后将 View Background 设置为默认值(无)。
https://i.stack.imgur.com/yQ74o.png
您可以从情节提要连接您的按钮的 IBOutlet
。
然后,您可以设置按钮的 corner radius
以使其变为圆角。
例如,您的 outlet
是 myButton
,
对象-C
self.myButton.layer.cornerRadius = 5.0 ;
迅速
myButton.layer.cornerRadius = 5.0
如果您想要精确的圆形按钮,那么您的按钮的 width
和 height
必须是 equal
并且 cornerRadius
必须等于高度或宽度 / 2(宽度或高度的一半)。
正如其他答案建议在代码中执行大部分工作一样,只有一个答案实际上提供了一种在情节提要 IB 界面中查看您的更改的方法。我的答案超越了那个答案,允许您更改视图、按钮、图像等的角半径。
请看下面的代码。要使用此代码,请创建一个名为 RoundedView 的新 swift 文件或任何您想要调用的文件,然后转到您的故事板并将类更改为“RoundedView”、“RoundedImageView”或“RoundedButton”。
import UIKit
@IBDesignable class RoundedImage: UIImageView
{
override func layoutSubviews() {
super.layoutSubviews()
updateCornerRadius()
}
@IBInspectable var rounded: Bool = false {
didSet {
updateCornerRadius()
}
}
@IBInspectable var cornerRadius: CGFloat = 0.1 {
didSet {
updateCornerRadius()
}
}
func updateCornerRadius() {
layer.cornerRadius = rounded ? cornerRadius : 0
layer.masksToBounds = rounded ? true : false
}
}
@IBDesignable class RoundedView: UIView
{
override func layoutSubviews() {
super.layoutSubviews()
updateCornerRadius()
}
@IBInspectable var rounded: Bool = false {
didSet {
updateCornerRadius()
}
}
@IBInspectable var cornerRadius: CGFloat = 0.1 {
didSet {
updateCornerRadius()
}
}
func updateCornerRadius() {
layer.cornerRadius = rounded ? cornerRadius : 0
layer.masksToBounds = rounded ? true : false
}
}
@IBDesignable class RoundedButton: UIButton
{
override func layoutSubviews() {
super.layoutSubviews()
updateCornerRadius()
}
@IBInspectable var rounded: Bool = false {
didSet {
updateCornerRadius()
}
}
@IBInspectable var cornerRadius: CGFloat = 0.1 {
didSet {
updateCornerRadius()
}
}
func updateCornerRadius() {
layer.cornerRadius = rounded ? cornerRadius : 0
layer.masksToBounds = rounded ? true : false
}
}
按照下面的屏幕截图。它在您运行模拟器时工作(不会在预览中看到)
https://i.stack.imgur.com/XUklw.png
我正在使用 Xcode 11.4 版
在属性检查器中,您可以定义角半径。
它不会显示在情节提要中,但在您运行项目时会正常工作。
https://i.stack.imgur.com/oVTPE.png
在情节提要中添加 layer.cornerRadius
时,请确保您没有前导或尾随空格。如果您进行复制粘贴,您可能会插入空格。如果 XCode 说某种警告或错误,那就太好了。
扩展是解决这个问题的最佳选择。创建视图或按钮的扩展
public extension UIView {
//Round the corners
func roundCorners(){
let radius = bounds.maxX / 16
layer.cornerRadius = radius
}
}
从代码中调用它
button.roundCorners()
https://i.stack.imgur.com/acfvN.png
然后给出边界半径
https://i.stack.imgur.com/2FcnV.png
结果是这样的
https://i.stack.imgur.com/gUzJq.png
尝试这个!!
override func viewDidLoad() {
super.viewDidLoad()
var button = UIButton.buttonWithType(.Custom) as UIButton
button.frame = CGRectMake(160, 100, 200,40)
button.layer.cornerRadius =5.0
button.layer.borderColor = UIColor.redColor().CGColor
button.layer.borderWidth = 2.0
button.setImage(UIImage(named:"Placeholder.png"), forState: .Normal)
button.addTarget(self, action: "OnClickroundButton", forControlEvents: .TouchUpInside)
button.clipsToBounds = true
view.addSubview(button)
}
func OnClickroundButton() {
NSLog(@"roundButton Method Called");
}
import UIKit
@IBDesignable class MyButton: UIButton
{
override func layoutSubviews() {
super.layoutSubviews()
}
func updateCornerRadius(radius:CGFloat) {
layer.cornerRadius = radius
}
@IBInspectable var cornerRadius:CGFloat = 0{
didSet{
updateCornerRadius(radius: cornerRadius)
}
}
}
clipsToBounds
才能使其正常工作。