web-dev-qa-db-fra.com

Coins ronds UIView dans Swift 4

Dans Swift 3, je pourrais faire quelque chose comme ceci pour contourner UIView:

import UIKit

@IBDesignable
class DesignableView: UIView {
}

extension UIView {

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

Et au storyboard, je pourrais simplement changer ceci:  properties

Actuellement, je reçois un "Build failed" au designable, mais Idk pourquoi. Je travaille sur Swift 4 et Xcode 9.

Pourquoi ça ne marche pas dans Swift 4?

5
Jonathan Solorzano

J'ai essayé votre code et cela fonctionne bien avec iOS 11.1 et Swift 4.0. (Comme vous l'avez dit, cela vous montre une erreur, mais cela ne me montre aucune erreur)

@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
        }
    }

}

Voici le résultat

 enter image description here


Mettre à jour:
Même votre code mis à jour fonctionne bien, aussi.

@IBDesignable
class DesignableView: UIView {
}

extension UIView {

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

Voici le résultat pour cela:

 enter image description here

19
Krunal

Rapide

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
}

utilisation:

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

RoundFrameOnly(*a view*, cornerRadius: 10)
0
iOS Flow

Votre code semble bien fonctionner dans Swift 4.0 avec un nouveau projet. Cependant, si vous utilisez également un Storyboard et son ensemble LaunchScreen, vous ne pourrez pas utiliser de classes personnalisées directement là-bas }.

Dans ce cas, décochez simplement Utiliser comme écran de lancement et vous devriez être capable de construire à nouveau.

enter image description here

0
jvrmed