IBDesignable drawRect不工作?

时间:2014-08-27 19:31:04

标签: xcode storyboard

我正在试图建立一个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))

    }


}

故事板视图(错误)

storyboard view

模拟器视图(正确)

simulator view

2 个答案:

答案 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代码,但这仍然可以给你一些见解。