【问题标题】:How to round the corners of a button如何使按钮的角变圆
【发布时间】:2011-06-30 04:31:20
【问题描述】:

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

我写了以下内容:

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

但是,我用这种方法得到的按钮没有圆角:它是一个普通的矩形,看起来与我的原始图像完全一样。我怎样才能得到一个圆角的图像来代表我的按钮?

谢谢!

【问题讨论】:

    标签: ios objective-c cocoa-touch uibutton rounded-corners


    【解决方案1】:

    您可以为视图上的按钮使用插座连接和 didSet 功能;

     @IBOutlet weak var button: UIButton!{
            didSet {
                button.layer.cornerRadius = 5;
                button.layer.masksToBounds = true;
            }
        }
    

    【讨论】:

      【解决方案2】:

      我在 UITextArea 上尝试了以下解决方案,我希望这也适用于 UIButton。

      首先在你的 .m 文件中导入这个 -

      #import <QuartzCore/QuartzCore.h>
      

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

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

      【讨论】:

      • 也适用于“用户定义的运行时属性”检查器
      • 也适用于 swift!只需将 YES 更改为 true。
      【解决方案3】:

      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 
          }
      

      【讨论】:

        【解决方案4】:

        对于目标 C

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

        对于斯威夫特

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

        【讨论】:

          【解决方案5】:

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

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

          现在这样调用

          yourBtnName.btnCorner()
          

          【讨论】:

            【解决方案6】:

            首先设置按钮的width=100和Height=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
            

            【讨论】:

              【解决方案7】:

              适用于 iOS Swift 4

              button.layer.cornerRadius = 25;
              button.layer.masksToBounds = true;
              

              【讨论】:

                【解决方案8】:

                为 Swift 3 更新:

                使用下面的代码使 UIButton 转角:

                 yourButtonOutletName.layer.cornerRadius = 0.3 *
                        yourButtonOutletName.frame.size.height
                

                【讨论】:

                  【解决方案9】:

                  对于斯威夫特:

                  button.layer.cornerRadius = 10.0
                  

                  【讨论】:

                    【解决方案10】:

                    你可以通过这个RunTime Attributes来实现

                    我们可以制作自定义按钮。请看附上的截图。

                    请注意:

                    在运行时属性中按照此说明更改边框颜色

                    1. 创建CALayer的category类

                    2. 在h文件中

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

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

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

                    谢谢

                    【讨论】:

                    • 只有我还是答案中的信息不完整?它真的不起作用。更新:只要我不指定borderColor,它就可以工作。但它总是使用黑色作为边框颜色。
                    • 扩展答案:IB 中设置的颜色可能是 UIColor 类型,它不适用于 CGColorRef 的borderColor。或类似的东西。所以一个解决方案是在CALayer上创建一个类别,在头文件中使用@property(nonatomic, assign) UIColor* borderIBColor;(与其他名称不冲突),实现为:-(void)setBorderIBColor:(UIColor*)color{self.borderColor = color.CGColor;} -(UIColor*)borderIBColor{return [UIColorcolorWithCGColor:self.borderColor];}
                    • 如果您不想要边框颜色,请将borderRadius设置为0,您将没有!
                    • 斯威夫特呢?
                    • @JayprakashDubey 我创建了 CALayer 的扩展。
                    【解决方案11】:

                    您可能想查看我的名为 DCKit 的库。它是在最新版本的 Swift 上编写的。

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

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

                    【讨论】:

                      【解决方案12】:
                      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
                      

                      【讨论】:

                        【解决方案13】:

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

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

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

                        【讨论】:

                          【解决方案14】:

                          如果现有项目中没有QuartCore框架,则在viewcontroller.m中导入#import &lt;QuartzCore/QuartzCore.h&gt;

                          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;
                          

                          【讨论】:

                            【解决方案15】:

                            如果你想要一个圆角只到一个角或两个角等...阅读这篇文章:

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

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

                            【讨论】:

                              【解决方案16】:

                              这里还有一个设置边框(使其更像按钮)的替代答案...How to set rectangle border for custom type UIButton

                              【讨论】:

                                猜你喜欢
                                • 2019-04-07
                                • 2021-07-11
                                • 1970-01-01
                                • 2021-04-23
                                • 2019-05-17
                                • 2011-05-04
                                • 2013-10-01
                                • 1970-01-01
                                相关资源
                                最近更新 更多