Je ne peux pas obtenir de bordure sur mes boutons dans XCode 5 sans les définir directement dans le code. Est-il possible qu'il n'y ait aucun moyen de le faire sur le storyboard sans créer une image d'arrière-plan personnalisée?
Vous pouvez utiliser le chemin d'accès aux clés.
Par exemple, le rayon d'angle (layer.cornerRadius
) comme décrit sur l'image. Vous ne pourrez pas voir les effets sur le storyboard, car ces paramètres sont évalués au moment de l'exécution. Vous pouvez maintenant utiliser une catégorie Swift dans UIView (code sous l'image) avec @IBInspectable
pour afficher le résultat dans le storyboard (si vous utilisez la catégorie, utilisez uniquement cornerRadius
et non layer.cornerRadius
comme chemin d'accès clé.
extension UIView {
@IBInspectable var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
layer.masksToBounds = newValue > 0
}
}
}
Voici la catégorie de Peter DeWeese réponse qui autorise l'utilisation de keypath layer.borderUIColor
pour définir la couleur de la bordure.
CALayer + XibConfiguration.h:
#import <QuartzCore/QuartzCore.h>
#import <UIKit/UIKit.h>
@interface CALayer(XibConfiguration)
// This assigns a CGColor to borderColor.
@property(nonatomic, assign) UIColor* borderUIColor;
@end
CALayer + XibConfiguration.m:
#import "CALayer+XibConfiguration.h"
@implementation CALayer(XibConfiguration)
-(void)setBorderUIColor:(UIColor*)color
{
self.borderColor = color.CGColor;
}
-(UIColor*)borderUIColor
{
return [UIColor colorWithCGColor:self.borderColor];
}
@end
Swift 3 Si vous voulez voir le résultat dans IB lorsque vous utilisez IBInspectable, vous devez étendre UIView et ajouter les propriétés à cette classe, c'est-à-dire.
@IBDesignable class MyView: UIView {}
extension MyView {
@IBInspectable var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
layer.masksToBounds = newValue > 0
}
}
@IBInspectable var borderWidth: CGFloat {
get {
return layer.borderWidth
}
set {
layer.borderWidth = newValue
layer.masksToBounds = newValue > 0
}
}
@IBInspectable var borderColor: UIColor {
get {
return UIColor.init(cgColor: layer.borderColor!)
}
set {
layer.borderColor = newValue.cgColor
}
}
}
Réponse courte:
layer.cornerRadius = 10
layer.borderWidth = 1
layer.borderColor = UIColor.blue.cgColor
Réponse longue:
customUIView.layer.cornerRadius = 10
pcustomUIView.layer.borderWidth = 1
customUIView.layer.borderColor = UIColor.blue.cgColor