如何在Storyboard中制作一个简单的圆角按钮?

Gin*_*as_ 92 xcode storyboard uibutton ios

我刚开始学习iOS开发,找不到如何制作简单的圆形按钮.我找到旧版本的资源.我是否需要为按钮设置自定义背景?在Android中,我只使用9补丁,但我知道iOS没有这个功能.

在此输入图像描述

Nis*_*ant 187

简答:是的

您绝对可以制作一个简单的圆形按钮,而无需额外的背景图像或为其编写任何代码.只需按照下面给出的屏幕截图,设置按钮的运行时属性,即可获得所需的结果.

它不会显示在Storyboard它,但它会在你运行项目时正常工作.

在此输入图像描述

注意:Key Path layer.cornerRadius和value是5.需要根据按钮的高度和宽度更改值.它的公式是按钮的高度*0.50.因此,请在模拟器或物理设备上查看预期的圆形按钮.如果在故事板中有多个圆形按钮,则此过程看起来很乏味.

  • 请以否定方式投票时添加评论. (7认同)
  • 令人失望的是,IB无法像磨机绘图应用程序一样显示这一点. (4认同)
  • @WilliamCerniuk:实际上它可以.查看http://nshipster.com/ibinspectable-ibdesignable/ (2认同)
  • 正如接受的答案所说,您可能还需要添加一个布尔键路径“clipsToBounds”才能正常工作。 (2认同)

Chi*_*buZ 80

你可以这样做:

@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
    }
}
Run Code Online (Sandbox Code Playgroud)

将班级设置为MyButtonin Identity Inspector和in IB您将拥有以下rounded属性:

在此输入图像描述

  • 到目前为止最好的答案.今天学到了新东西真棒! (4认同)
  • 这个答案不完整。启动应用程序时,xCode将使用界面构建器中视图的框架大小,而不是应用程序运行时的实际框架大小。 (2认同)
  • @SimonBackx,谢谢,我更新了答案。 (2认同)
  • 您也可以使用“ didSet”代替“ willSet”,并删除参数isRounded。 (2认同)
  • 如果你使用背景图片,也设置`layer.masksToBounds = true` (2认同)

rea*_*mez 77

要在故事板中执行此操作,您需要使用按钮的图像.

或者你可以用代码完成:

 btn.layer.cornerRadius = 10
 btn.clipsToBounds = true
Run Code Online (Sandbox Code Playgroud)

  • 为什么需要clipsToBounds?看来,直到我删除它之后,阴影才会起作用. (2认同)

ans*_*son 28

  1. 创建一个Cocoa Touch类.

在此输入图像描述

  1. 在RoundButton类中插入代码.

    import UIKit
    
    @IBDesignable
    class 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
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 参考图像.

在此输入图像描述

  • 它的工作,对我帮助很大,谢谢 (2认同)

Fra*_*eNL 10

我发现最简单的方法是将cornerRadius设置为视图高度的一半.

button.layer.cornerRadius = button.bounds.size.height/2
Run Code Online (Sandbox Code Playgroud)

  • 你是对的,我错过了问题所包含的图片,该图片显示的是海报实际上与你的回答相匹配的内容超过了接受的答案 - upvote (2认同)

Gra*_*cka 9

Xcode 13 添加了一个选项,通过调整角样式属性(在“背景配置”下)来实现此目的。

必须在“背景配置”中配置背景,然后将“查看背景”设置为默认值(无)。

在此输入图像描述