如何以编程方式将没有宽度的自定义按钮居中

时间:2019-02-01 19:43:51

标签: swift uibutton

在collectionviewCell中,我有一个“ MainButton”按钮(UIButton的子类):

var buttonTest: MainButton {
        let testBtn = MainButton(type: .custom)
        testBtn.setTitle("Save settings", for: .normal)
        testBtn.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
        return testBtn
    } 

此外,在我的设置功能中,我介绍了一个基本的UIView,它将按住我的按钮。

let supportTest = UIView()
        supportTest.backgroundColor = .blue
        supportTest.translatesAutoresizingMaskIntoConstraints = false
        supportTest.clipsToBounds = true
        addSubview(supportTest)
        supportTest.anchor(top: nil, leading: leadingAnchor, bottom: nil, trailing: trailingAnchor)
        supportTest.topAnchor.constraint(equalTo: separator.bottomAnchor, constant: 20).isActive = true
        supportTest.heightAnchor.constraint(equalToConstant: 40).isActive = true 

然后我将我的按钮添加为子视图

supportTest.addSubview(buttonTest)

但是,当I约束使其居中,这2个下一行使其崩溃。

buttonTest.anchor(top: nil, leading: leadingAnchor, bottom: nil, trailing: trailingAnchor)
buttonTest.centerXAnchor.constraint(equalTo: supportTest.centerXAnchor).isActive = true

有一种方法以正确使得该按钮为中心没有给它的宽度?因为我的按钮标题因内容而异。 我想过一个stackview,与2“空”的观点边境吧...

告诉我您的想法。

这是如何看起来像实际(2个最后行作为当然的注释): https://imgur.com/n380XEA

1 个答案:

答案 0 :(得分:0)

制作

if (!in_array($row['InvoiceNo'], $invoiceHasProcessed)) {
    $tot_BalanceAmt += $row['BalanceAmt'];
    $invoiceHasProcessed[] = $row['InvoiceNo'];
}

因为它当前是一个计算属性,所以您添加到lazy var buttonTest: MainButton = { let testBtn = MainButton(type: .custom) testBtn.setTitle("Save settings", for: .normal) testBtn.addTarget(self, action: #selector(buttonAction), for: .touchUpInside) return testBtn }() 的实例与您将约束设置为1的实例不同,后者没有superview,因此发生崩溃

还将按钮的前,尾和centerX约束设置为,还需要y约束(top / bottom / centerY)