ios Swift如何检查API是否不可用[重复]

dldeef67  于 2023-05-30  发布在  iOS
关注(0)|答案(1)|浏览(89)
    • 此问题已在此处有答案**:

Negate #available statement(5个答案)
3年前关闭。
我只对视图的左上角和右上角应用角半径。在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
    }
}

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

du7egjpx

du7egjpx1#

如果需要支持比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
   }     
}

相关问题