我正在试图建立一个IBDesignable,将一个Icon放在按钮标签的右侧。 它在模拟器中工作,但故事板不会将图标重新定位到右侧。
@IBDesignable class IconLabelButtonView : UIButton {
override init(frame: CGRect) {
super.init(frame: frame)
self.setup()
}
required init(coder : NSCoder) {
super.init(coder:coder)
self.setup()
}
func setup() {
}
override func drawRect(rect: CGRect)
{
super.drawRect(rect)
let imageSize:CGSize = self.imageView.frame.size
let titleSize:CGSize = self.titleLabel.frame.size
let labeledIconButtonBufferMagnitude:CGFloat = 6.0
let imagePadding:CGFloat = ceil(labeledIconButtonBufferMagnitude / 2)
let titlePadding:CGFloat = floor(labeledIconButtonBufferMagnitude / 2)
self.imageEdgeInsets = UIEdgeInsetsMake(0.0, (titleSize.width + imagePadding), 0.0, -(titleSize.width + imagePadding))
self.titleEdgeInsets = UIEdgeInsetsMake(0.0, -(imageSize.width + titlePadding), 0.0, (imageSize.width + titlePadding))
}
}
故事板视图(错误)
模拟器视图(正确)
答案 0 :(得分:1)
您实际上并未在drawRect()
方法中执行任何Core Graphics绘图。可以对当前CGContextRef
进行绘制,也可以将代码移到layoutSubviews()
之类的地方。
答案 1 :(得分:0)
我的一个自定义IBInspectable UIButton出现了类似的问题。 在这里查看我的博文:http://www.hixfield.net/blog/2015/03/function-call-order-for-custom-uibutton-with-ibdesignable-ibinspectable/
更具体一点我觉得你需要实现layoutSubviews来正确定位图标(在我的自定义按钮中我必须这样做才能使按钮的标签与按钮的视图相同)...
它的Objective-c代码,但这仍然可以给你一些见解。