【问题标题】:IBInspectable UIEdgeInsets not shown in IBOutletIBInspectable UIEdgeInsets 未显示在 IBOutlet 中
【发布时间】:2016-10-24 03:52:14
【问题描述】:
我正在为UIButton 创建一个自定义类以增加点击区域。我需要该用户可以在情节提要本身中输入填充。所以我创建了一个IBInspectable 属性。
@IBDesignable class UIIconButton: UIButton {
@IBInspectable var touchPadding:UIEdgeInsets = UIEdgeInsetsZero
}
但它没有显示在情节提要中。但是,如果将其替换为 CGRect,则它在情节提要中可见。
【问题讨论】:
标签:
ios
storyboard
xcode7
xib
ibinspectable
【解决方案1】:
从 Xcode 7 开始,Interface Builder 无法将UIEdgeInsetsZero 理解为@IBInspectable(真糟糕!)。
但是,您可以通过使用 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
}
这将在界面生成器中正确显示bottomInset、leftInset 等。