J'ai eu le même problème. Il ne s'affiche pas sur le téléphone, mais il est parfait sur Storyboard et le débogueur d'interface utilisateur. Cela fonctionnait aussi quand je mettais le projet "Ouvre avec Xcode 7" au lieu de 8 mais ce n'était pas une solution satisfaisante. J'ai donc creusé et trouvé le problème. Le problème était avec une classe ressemblant à ceci :
@IBDesignable public class MyButton: UIButton {
@IBInspectable var styleName: String = "" {
didSet {
switch styleName {
case "RoundedLight":
tintColor = UIColor.lightPinkColor()
layer.borderColor = UIColor.whiteColor().CGColor
layer.borderWidth = 1
layer.masksToBounds = true
default:
break
}
}
}
override public func layoutSubviews() {
super.layoutSubviews()
switch styleName {
case "RoundedLight":
layer.cornerRadius = frame.height / 2
default:
break
}
}
}
Je l'ai changé en ceci et cela fonctionne maintenant :
@IBDesignable public class MyButton: UIButton {
@IBInspectable var styleName: String = "" {
didSet {
layoutIfNeeded()
}
}
override public func layoutSubviews() {
super.layoutSubviews()
switch styleName {
case "RoundedLight":
tintColor = UIColor.lightPinkColor()
layer.borderColor = UIColor.whiteColor().CGColor
layer.borderWidth = 1
layer.cornerRadius = frame.height / 2
layer.masksToBounds = true
default:
break
}
}
}
Notez qu'aucune des solutions ci-dessus n'a fonctionné pour moi, et je veux dire :
- Appel à
layoutIfNeeded
dans le layoutSubviews()
- Appel à
layoutIfNeeded
dans le awakeFromNib
de mon bouton (ou de ma cellule contenant le bouton)
- Appel à
layoutIfNeeded
dans le layoutSubview
de ma cellule
- Appel à
contentView.layoutIfNeeded()
dans le awakeFromNib
de ma cellule
- Appel à
view.layoutIfNeeded()
dans mon contrôleur de vue