2016-06-22 4 views
5

Я создаю пользовательский класс для UIButton, чтобы увеличить область отвода. Мне нужно, чтобы пользователь мог вводить дополнение в самой раскадровки. Поэтому я делаю недвижимость IBInspectable.IBInspectable UIEdgeInsets, не показанный в IBOutlet

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

Но он не показан в раскадровке. Однако, если заменить их на CGRect, то это видно в раскадровке.

ответ

15

Начиная с Xcode 7, Interface Builder не понимает UIEdgeInsetsZero как @IBInspectable (bummer!).

Вы можете обойти это, однако, с помощью CGFloat свойств установить край врезку косвенно:

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  
} 

Это правильно показать bottomInsetleftInset, и т.д. в пределах строителя интерфейса.

+0

Принял меня пару часов, чтобы добраться до этого решения. – Urban

Смежные вопросы