如何绕过按钮的角落


182

我有一个矩形图像(jpg),想用它在xcode中用圆角填充按钮的背景。

我写了以下内容:

UIButton *button = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
CGRect frame = CGRectMake(x, y, cardWidth, cardHeight);
button.frame = frame;
[button setBackgroundImage:backImage forState:UIControlStateNormal];

但是,我用这种方法得到的按钮没有圆角:而是一个看起来像我的原始图像的纯矩形。我该如何获取带有圆角的图像来表示我的按钮?

谢谢!

Answers:


436

我想我遇到了您的问题,我尝试使用UITextArea使用以下解决方案,并且我想这也可以与UIButton一起使用。

首先将其导入您的.m文件-

#import <QuartzCore/QuartzCore.h>

然后在您的loadView方法中添加以下行

    yourButton.layer.cornerRadius = 10; // this value vary as per your desire
    yourButton.clipsToBounds = YES;

希望这对您有用,如果可以,请进行沟通。


6
也可与“用户定义的运行时属性”检查器一起使用
Avi Cherry

作品也迅速!只需将YES更改为true。
安德鲁·托马斯

119

您可以通过此RunTime属性来实现

在此处输入图片说明

我们可以制作自定义按钮。请参见所附的屏幕截图。

请注意:

在运行时属性中更改边框的颜色,请按照以下说明进行操作

  1. 创建CALayer的类别类

  2. 在h文件中

    @property(nonatomic, assign) UIColor* borderIBColor;
  3. 在m文件中:

    -(void)setBorderIBColor:(UIColor*)color {
        self.borderColor = color.CGColor;
    }
    
    -(UIColor*)borderIBColor {
        return [UIColor colorWithCGColor:self.borderColor];
    }

现在开始设置边框颜色检查屏幕截图

更新的答案

谢谢


4
只是我还是答案中的信息不完整?它实际上是行不通的。更新:只要我不指定,它就可以工作borderColor。但随后,它始终对边框颜色使用黑色。
强尼

3
扩展答案:IB中设置的颜色可能是UIColor类型,不适用于borderColor,后者是CGColorRef。或类似的东西。因此,一种解决方案是在CALayer上创建一个类别,该类别@property(nonatomic, assign) UIColor* borderIBColor;在标头文件中带有(不会与其他名称冲突),实现是:-(void)setBorderIBColor:(UIColor*)color{self.borderColor = color.CGColor;} -(UIColor*)borderIBColor{return [UIColorcolorWithCGColor:self.borderColor];}
Jonny

1
如果您不希望使用边框颜色,请将borderRadius设置为0,就不会有边框颜色!
jungledev

斯威夫特呢?
Jayprakash Dubey

1
@JayprakashDubey我创建CALayer的扩展名。
Krutarth Patel

14

您可能要签出名DCKit的库。它是用最新版本的Swift编写的。

您可以直接从“界面”构建器中创建一个圆角按钮/文本字段:

DCKit:圆形按钮

它还具有许多其他很酷的功能,例如带有验证的文本字段,带有边框,虚线边框,圆形和细线视图的控件等。


11

将极限角半径向上推以得到一个圆:

    self.btnFoldButton.layer.cornerRadius = self.btnFoldButton.frame.height/2.0;

在此处输入图片说明

如果按钮框是正方形,则与frame.height或frame.width无关。否则,请使用两者中最大的一个。


7

进口QuartCore框架,如果它不存在于现有的项目,然后导入#import <QuartzCore/QuartzCore.h>viewcontroller.m

UIButton *button = [[UIButton buttonWithType:UIButtonTypeRoundedRect]];
CGRect frame = CGRectMake(x, y, width, height); // set values as per your requirement
button.layer.cornerRadius = 10;
button.clipsToBounds = YES;

6
UIButton* closeBtn = [[UIButton alloc] initWithFrame:CGRectMake(10, 50, 90, 35)];
//Customise this button as you wish then
closeBtn.layer.cornerRadius = 10;
closeBtn.layer.masksToBounds = YES;//Important

4

首先设置按钮的宽度= 100和高度= 100

目标C解决方案

YourBtn1.layer.cornerRadius=YourBtn1.Frame.size.width/2;
YourBtn1.layer.borderColor=[uicolor blackColor].CGColor;
YourBtn1.layer.borderWidth=1.0f;

Swift 4解决方案

YourBtn1.layer.cornerRadius = YourBtn1.Frame.size.width/2
YourBtn1.layer.borderColor = UIColor.black.cgColor
YourBtn1.layer.borderWidth = 1.0

2

如果您只想将一个圆角变成一个或两个角等,请阅读此文章:

[ObjC] –带圆角的UIButton- http://goo.gl/kfzvKP

这是XIB / Storyboard子类。无需编写代码即可导入和设置边框。




2

试试我的代码。在这里,您可以设置UIButton的所有属性,例如文本颜色,背景颜色,拐角半径等。

extension UIButton {
    func btnCorner() {
        layer.cornerRadius = 10
        clipsToBounds = true
        backgroundColor = .blue
    }
}

现在这样打电话

yourBtnName.btnCorner()



0

在此处输入图片说明

对于目标C

submitButton.layer.cornerRadius = 5;
submitButton.clipsToBounds = YES;

对于Swift

submitButton.layer.cornerRadius = 5
submitButton.clipsToBounds = true

0

Swift 4更新

我还尝试了许多选项,但仍无法使UIButton陷入困境。我在“ viewDidLayoutSubviews()解决我的问题”中添加了转角半径代码。

func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        anyButton.layer.cornerRadius = anyButton.frame.height / 2
    }

我们也可以如下调整cornerRadius

func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        anyButton.layer.cornerRadius = 10 //Any suitable number as you prefer can be applied 
    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.