2016-06-22 8 views
5

nicht angezeigt. Ich erstelle eine benutzerdefinierte Klasse für UIButton, um die Tap-Fläche zu erhöhen. Ich brauche diesen Benutzer kann die Auffüllung in Storyboard selbst eingeben. Also mache ich eine IBInspectable Eigenschaft.IBInspectable UIEdgeInsets werden in IBOutlet

@IBDesignable class UIIconButton: UIButton { 
    @IBInspectable var touchPadding:UIEdgeInsets = UIEdgeInsetsZero 
} 

Aber es ist nicht im Storyboard gezeigt. Wenn jedoch das gleiche mit CGRect ersetzt wird, dann ist es im Storyboard sichtbar.

Antwort

15

Ab Xcode 7, kann Interface Builder UIEdgeInsetsZero nicht als @IBInspectable (bummer!) Verstehen.

Sie können dieses Problem umgehen, jedoch durch CGFloat Eigenschaften mit Randeinsätze indirekt setzen:

public class UIIconButton: UIButton { 

    @IBInspectable public var bottomInset: CGFloat { 
    get { return touchPadding.bottom } 
    set { touchPadding.bottom = newValue } 
    } 
    @IBInspectable public var leftInset: CGFloat { 
    get { return touchPadding.left } 
    set { touchPadding.left = newValue } 
    } 
    @IBInspectable public var rightInset: CGFloat { 
    get { return touchPadding.right } 
    set { touchPadding.right = newValue } 
    } 
    @IBInspectable public var topInset: CGFloat { 
    get { return touchPadding.top } 
    set { touchPadding.top = newValue } 
    } 

    public var touchPadding = UIEdgeInsetsZero  
} 

Dies wird die richtig bottomInset zeigen, leftInset, etc innerhalb Builder-Schnittstelle.

+0

Ich brauchte ein paar Stunden, um zu dieser Lösung zu kommen. – Urban

Verwandte Themen