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:
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?
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
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:
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)
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.