使用自动布局将子视图添加到UIButton

时间:2018-03-28 04:37:50

标签: ios swift uibutton autolayout subclass

我创建了UIButton的子类。此子类(BubbleBtn)负责向按钮添加UIView

添加的视图应该是从顶部,左侧和右侧6个点,而跨越父按钮高度的一半。

代码:

class BubbleBtn: UIButton {
    override init(frame: CGRect) {
        super.init(frame: frame)
        addBubbleView()
    }
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        addBubbleView()
    }
    func addBubbleView() {
        setNeedsLayout()
        layoutIfNeeded()
        let bubbleBuffer:CGFloat = 6
        let bubble = UIView(frame: CGRect(x: bubbleBuffer, y: bubbleBuffer, width: self.frame.width - (bubbleBuffer * 2), height: (self.frame.height / 2)))
        bubble.isUserInteractionEnabled = false
        bubble.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 0.5)
        bubble.layer.cornerRadius = 10
        bubble.layer.zPosition = -1
        self.addSubview(bubble)
    }
}

问题是,添加的UIView的宽度和高度不正确;大按钮的宽度和高度都会缩短。

如何将UIView添加到按钮中,以便气泡视图呈现适当的大小?

下面发布的截图:

Autolayout problem with subclass button

2 个答案:

答案 0 :(得分:1)

您应该根据超级视图的bounds和正确的autoresizingMask设置框架。

let bubble = UIView(frame: CGRect(x: bubbleBuffer, y: bubbleBuffer,
    width: self.bounds.width - (bubbleBuffer * 2), 
    height: self.bounds.height - (2 * bubbleBuffer))
bubble.translatesAutoresizingMaskIntoConstraints = true
bubble.autoresizingMask = [ .flexibleWidth, .flexibleHeight ]

当超级视图的bubble发生变化时,frame会调整其宽度。

答案 1 :(得分:1)

尝试为按钮内的视图添加约束。

{{1}}