【问题标题】:Are these buttons round, or nodular?这些按钮是圆形的还是结节的?
【发布时间】:2018-09-07 10:59:59
【问题描述】:

也许我的眼睛在欺骗我,但是在使用此代码为类似于 iPhone 的电话应用程序的数字键盘创建圆形按钮之后:

        for subStack in (mainStackView?.arrangedSubviews)! {

            for thisView in (subStack.subviews) {

                if let button = thisView as? UIButton {


                    button.layer.borderWidth = 2
                    button.layer.borderColor = orangeBorderColor

                    button.frame.size.width = 76
                    button.frame.size.height = 76
                    button.layer.cornerRadius = 0.5 * (button.bounds.size.height)
                    button.layer.masksToBounds = true
//                    button.clipsToBounds = true
                    button.backgroundColor = UIColor.lightGray
                    button.titleLabel?.font = button.titleLabel?.font.withSize(30)
                    button.setTitleColor(.black, for: .normal)
                }
            }
        }

我得到的东西看起来像这样:

我尝试过使用clipsToBoundsmaskToBounds,我尝试过按钮的.frame 及其.bounds 属性作为算术的基础,但它们在我看来仍然是结节的而不是圆的。

有人可以提供一个平滑它们的建议吗?

谢谢!

编辑

当我添加这个时:

                print(button.frame.size as Any)
                print(button.bounds.size as Any)
                print(button.layer.cornerRadius as Any)

我在控制台中得到了这个:

(76.0, 76.0)
(76.0, 76.0)
38.0

【问题讨论】:

  • 你展示了你的其余代码吗?
  • 就是这样。我在 Storyboard 中添加了按钮,并使用此代码修改形状。我从一个旧的 Objective-C 项目中改编了代码,原始代码产生了完美的圆圈。你能告诉我你对哪个代码感兴趣吗?
  • 好的,当您打印框架时会得到什么?
  • 让我检查一下...
  • 请参阅上面的编辑框和边界大小...

标签: ios button rounded-corners


【解决方案1】:

您不能直接设置使用约束布局的视图框架,并且堆栈视图的排列子视图必须使用约束进行布局。那是你的问题。自动布局(稍后)会覆盖您设置框架的尝试,因此您的角半径与按钮的大小不匹配。

创建UIButton 的子类。在您的子类中,覆盖layoutSubviews 以设置按钮的cornerRadius(并且不要忘记调用super.layoutSubviews)。

【讨论】:

  • 我偷偷怀疑它可能与 Stack 视图有关。我会实施你的答案,我相信它会解决问题。由于我对 Swift 很陌生(而且是一个非常慢的程序员),所以我会花一点时间,但我会回来报告的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 2021-02-01
  • 1970-01-01
相关资源
最近更新 更多