【问题标题】:Round Corners UIView in Swift 4Swift 4 中的圆角 UIView
【发布时间】:2018-03-24 15:03:03
【问题描述】:

在 swift 3 中,我可以做这样的事情来使我的 UIView 角落变圆:

import UIKit

@IBDesignable
class DesignableView: UIView {
}

extension UIView {

    @IBInspectable
    var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
        }
    }
}

在情节提要上,我可以简单地改变这个:

目前我在可设计项目中遇到“构建失败”,但不知道为什么。我正在开发 swift 4 和 Xcode 9。

为什么它在 swift 4 中不起作用?

【问题讨论】:

  • 有什么问题?一切正常。
  • 请提供足够的代码让我们重现问题。
  • @matt 我更新了代码并添加了我在 Xcode 8 和 swift 3 中使用的描述性图像
  • 但它不允许我们重现问题。你所展示的效果很好。 (在一个简单的 vanilla fresh 项目中尝试一下。但请不要为此使用 extension。)问题出在其他地方,您还没有显示出来。
  • 抱歉发布问题,一切正常,我有一个图像视图,让我认为 UIView 没有更新,毕竟这是一种视觉效果

标签: ios swift uiview swift4 ibdesignable


【解决方案1】:

我已经尝试过您的代码,它在 iOS 11.1 和 Swift 4.0 上运行良好。 (正如您所提到的,它向您显示了一个错误,但它没有向我显示任何错误)

@IBDesignable
class RoundUIView: UIView {

    @IBInspectable var borderColor: UIColor = UIColor.white {
        didSet {
            self.layer.borderColor = borderColor.cgColor
        }
    }

    @IBInspectable var borderWidth: CGFloat = 2.0 {
        didSet {
            self.layer.borderWidth = borderWidth
        }
    }

    @IBInspectable var cornerRadius: CGFloat = 0.0 {
        didSet {
            self.layer.cornerRadius = cornerRadius
        }
    }

}

这是结果


更新:
即使您更新的代码也可以正常工作。

@IBDesignable
class DesignableView: UIView {
}

extension UIView {

    @IBInspectable
    var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
        }
    }
}

这是它的结果:

【讨论】:

  • 回答简单的状态“它对我有用”实际上不是堆栈溢出可接受的答案。
  • @rmaddy 有时需要向 OP 证明代码确实有效。我认为这个答案是完全合理的。
  • @rmaddy 很好,但我不在乎。他说他说的,我说我说的。服务不是法律,同时我们在现场试图向提问者证明他们没有提供可重复的案例。如果您真的对此感觉如此强烈,请标记答案或投反对票。
  • @Krunal 模块名称无关;他有一个模块名称,但他在屏幕截图中屏蔽了它,因为他不想让我们知道它是什么(仔细看,你会看到擦除的证据)
  • 谢谢!完美的解决方案。我们如何为UISearchbar 做到这一点?
【解决方案2】:

这个解决方案正在帮助我在 Swift 5 中获得四舍五入的 UIView

view.layer.cornerRadius = 10;
view.clipsToBounds  =  true

【讨论】:

    【解决方案3】:

    public func RoundFrameBackground(_ aView: UIView!, borderWidth: CGFloat!, cornerRadius: CGFloat!, borderColor: UIColor, backgroundColor: UIColor) {
        aView.layer.borderWidth = borderWidth ; aView.layer.borderColor = borderColor.cgColor
        aView.backgroundColor = backgroundColor ; aView.clipsToBounds = true
        aView.layer.cornerRadius = cornerRadius
    }
    
    public func RoundFrameOnly(_ aView: UIView!, cornerRadius: CGFloat!) {
        aView.clipsToBounds = true
        aView.layer.cornerRadius = cornerRadius
    }
    

    使用:

    RoundFrameBackground(*a view*, borderWidth: 1, cornerRadius: 10, borderColor: UIColor.red, backgroundColor: UIColor.blue)
    
    RoundFrameOnly(*a view*, cornerRadius: 10)
    

    【讨论】:

      【解决方案4】:

      您的代码似乎在 Swift 4.0 的新项目中运行良好。但是,if you are using a Storyboard and its set as LaunchScreen too, you won't be able to use custom classes directly there

      在这种情况下,只需取消选中 用作启动屏幕,您应该能够再次构建。

      【讨论】:

      • 它不在 LaunchScreen
      • 你能分享更多关于构建错误的信息吗?可以看到打开报告导航器的详细消息
      • 没有应用构建错误,这是一个可设计的构建错误,它不会阻止应用运行
      猜你喜欢
      • 2018-02-21
      • 2016-01-21
      • 1970-01-01
      • 2021-05-04
      • 2021-03-16
      • 2010-12-03
      • 2018-01-05
      • 2019-10-17
      • 2011-06-18
      相关资源
      最近更新 更多