ios - Swift 如何检查 API 是否不可用

标签 ios swift4 cornerradius

我仅将圆角半径应用于 View 的左上角和右上角。在 viewDidLoad()我有:

if #available(iOS 11.0, *) {
    view.layer.cornerRadius = 20.0
    view.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
} 

如果 iOS 11 不可用,最好的方法似乎是 draw(_ rect:) 。因为我必须在 viewDidLoad() 之外覆盖它,我想做以下事情

if NOT #available(iOS 11.0, *) {
    override func draw(_ rect: CGRect) {
        let maskPath = UIBezierPath(roundedRect: self.contentView.bounds, byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize(width: 20.0, height: 20.0))
        let shapeLayer = CAShapeLayer()
        shapeLayer.frame = self.bounds
        shapeLayer.path = maskPath.cgPath
        view.layer.mask = shapeLayer
    }
}

这在语法上当然是不正确的。我该怎么办?

最佳答案

如果您需要支持 iOS 11 之前的版本,请在函数 draw(rect:) 中使用 #available 并使用 else 部分在早期版本上应用逻辑

override func draw(_ rect: CGRect) {
    if #available(iOS 11, *) {} else {
      let maskPath = UIBezierPath(roundedRect: self.contentView.bounds, byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize(width: 20.0, height: 20.0))
      let shapeLayer = CAShapeLayer()
      shapeLayer.frame = self.bounds
      shapeLayer.path = maskPath.cgPath
      view.layer.mask = shapeLayer
    }
 }

更新 Swift 5.6:使用#unavailable

override func draw(_ rect: CGRect) {
   if #unavailable(iOS 11, *) {
      let maskPath = UIBezierPath(roundedRect: self.contentView.bounds, byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize(width: 20.0, height: 20.0))
      let shapeLayer = CAShapeLayer()
      shapeLayer.frame = self.bounds
      shapeLayer.path = maskPath.cgPath
      view.layer.mask = shapeLayer
   }     
}

关于ios - Swift 如何检查 API 是否不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49021311/

相关文章:

ios - UIImageView.layer.cornerRadius 在不同像素密度上创建圆形图像的问题 ios

iOS:链接错误而反对静态库,即使我没有引用该库中的任何代码

ios - UImage 加载整个 SKTextureAtlas 而不仅仅是 SKTexture

ios - 在 swift 4.0 中获取 JSON 数据时出错

ios - segue 没有在 segue 中传输字符串(swift4)

ios - 如何选择范围 - Swift 中的 FSCalendar?

swift - 在 Swift 上添加圆角层

ios - 向每个单元格添加带有 cornerRadius 的 UILabel 时,UITableView 开始爬行

ios - UITableViewController 模糊背景不显示滚动

ios实现任意方向任意角度的UISwipeGestureRecogniser