【问题标题】:IBDesignable drawRect not working?IBDesignable drawRect 不工作?
【发布时间】:2015-03-19 14:26:20
【问题描述】:

我正在尝试构建一个 IBDesignable 以将图标放在按钮标签的右侧。 它在模拟器中工作,但情节提要不会将图标重新定位到右侧。

@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))

    }


}

故事板视图(错误)

模拟器视图(正确)

【问题讨论】:

    标签: xcode storyboard


    【解决方案1】:

    您实际上并没有在 drawRect() 方法中绘制任何核心图形。要么对当前的CGContextRef 进行一些绘图,要么将该代码移动到像layoutSubviews() 这样的地方。

    【讨论】:

      【解决方案2】:

      我的一个自定义 IBInspectable UIButtons 也有类似的问题。 在这里查看我的博文:http://www.hixfield.net/blog/2015/03/function-call-order-for-custom-uibutton-with-ibdesignable-ibinspectable/

      更具体地说,我认为您需要实现 layoutSubviews 以正确定位图标(在我的自定义按钮中,我必须这样做以使按钮的标签与按钮的视图相同)...

      它的objective-c代码,但这仍然应该给你一些洞察力。

      【讨论】:

        猜你喜欢
        • 2021-03-22
        • 1970-01-01
        • 2015-02-11
        • 1970-01-01
        • 2014-11-29
        • 2016-11-28
        • 2019-06-13
        • 2017-05-10
        • 2015-10-23
        相关资源
        最近更新 更多