【问题标题】:UIButton Round Corner not working properly on iPhone 5UIButton Round Corner 在 iPhone 5 上无法正常工作
【发布时间】:2017-01-31 20:20:22
【问题描述】:

这是通过UI扩展方法

extension UIView {
func roundCorners(corners:UIRectCorner, radiusWidth: CGFloat,radiusHeight: CGFloat) {
    let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radiusWidth/2, height: radiusHeight/2))
    let mask = CAShapeLayer()
    mask.path = path.cgPath
    self.layer.mask = mask
}}

通过这种扩展方法,我想在 viewdidload 上使用此代码制作带圆角的按钮

 btnRideNow.roundCorners(corners: [.topRight], radiusWidth: btnRideNow.frame.width,radiusHeight: btnRideNow.frame.height )
 btnRideLater.roundCorners(corners: [.topLeft], radiusWidth: btnRideLater.frame.width,radiusHeight: btnRideLater.frame.height )

但在 iPhone 5 上我得到了这个结果 ScreenShot

您可以看到左键无法正确呈现,但在 iPhone 6 中却可以正常显示,为什么?

【问题讨论】:

    标签: ios iphone swift xcode


    【解决方案1】:

    一切都是时间问题。

    如果你打电话给roundCorners太快了,例如在viewDidLoad 中,按钮的framebounds 可能尚未最终确定。但是你的roundCorners 依赖于bounds,所以如果你添加了掩码并且按钮然后由于layout而调整大小,你自然会弄错结果。

    【讨论】:

    • 谢谢我把代码放在 viewDidAppear 上,它可以按我的意愿工作
    • 不过要小心,因为viewDidAppear 可以被多次调用。
    【解决方案2】:

    如果你想要圆角,你可以简单地做:

    view.layer.cornerRadius 
    

    如果你想要一个边框,你可以做

    view.layer.borderWidth 
    

    颜色

    view.layer.borderColor
    

    【讨论】:

      【解决方案3】:

      这是一个与 IB 一起使用的简单子类。您应该能够轻松地使其适应您的需求:

      @IBDesignable
      public class Button: UIButton {
          @IBInspectable public var borderColor:UIColor? {
              didSet {
                  layer.borderColor = borderColor?.cgColor
              }
          }
          @IBInspectable public var borderWidth:CGFloat = 0 {
              didSet {
                  layer.borderWidth = borderWidth
              }
          }
          @IBInspectable public var cornerRadius:CGFloat {
              get {
                  return layer.cornerRadius
              }
              set {
                  layer.cornerRadius = newValue
                  layer.masksToBounds = newValue > 0
              }
          }
      }
      

      现在,如果您想简单地编写代码,您已经得到了大部分答案。对于一个完整的圆圈:

      view.layer.cornerRadius = view.frame.height / 2
      

      你可以使用宽度,如果它是方形的。但就像@Matt 说的(他非常好),小心正确设置框架/边界后执行此操作!

      【讨论】:

      • 这与我的回答有何不同?
      • @Sneak,我不是故意要偷东西的——因为 Matt 的回答被接受了,这才是最重要的。您没有给出 .cornerRadius 需要的完整示例。和平!没有伤害的意思,我马上删除我的答案。我可能是错的,但我一直认为一个需要 MVCE 问题的 Q/A 网站也意味着这个问题的答案。但真诚地,和平。
      • 不需要删除m8,你给出了一个很好的答案,我赞成你的。让它不要删除它:)
      猜你喜欢
      • 2023-03-06
      • 2023-03-18
      • 2013-10-03
      • 2018-12-27
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多