IBInspectable UIEdgeInsets 未显示在 IBOutlet 中
IBInspectable UIEdgeInsets not shown in IBOutlet
我正在为 UIButton
创建自定义 class 以增加点击区域。我需要用户可以在故事板本身中输入填充。所以我做了一个 IBInspectable
属性.
@IBDesignable class UIIconButton: UIButton {
@IBInspectable var touchPadding:UIEdgeInsets = UIEdgeInsetsZero
}
但故事板中没有显示。但是,如果用 CGRect
替换相同的内容,那么它在情节提要中可见。
自 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
等。
我正在为 UIButton
创建自定义 class 以增加点击区域。我需要用户可以在故事板本身中输入填充。所以我做了一个 IBInspectable
属性.
@IBDesignable class UIIconButton: UIButton {
@IBInspectable var touchPadding:UIEdgeInsets = UIEdgeInsetsZero
}
但故事板中没有显示。但是,如果用 CGRect
替换相同的内容,那么它在情节提要中可见。
自 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
等。