Swift - UIButton 以编程方式设置约束

Posted

技术标签:

【中文标题】Swift - UIButton 以编程方式设置约束【英文标题】:Swift - UIButton setting constraints programmatically 【发布时间】:2019-11-22 18:51:37 【问题描述】:

我在为UIButton 设置heightwidth constraints 时遇到问题。我不知道为什么这段代码不起作用:

let wishButton: UIButton = 
    let v = UIButton()
    v.setImage(UIImage(named: "wishButton"), for: .normal)
    v.translatesAutoresizingMaskIntoConstraints = false
    v.addTarget(self, action: #selector(wishButtonTapped), for: .touchUpInside)
    return v
()

这些是我的限制:

wishButton.centerXAnchor.constraint(equalTo: popUpView.centerXAnchor).isActive = true
wishButton.centerYAnchor.constraint(equalTo: popUpView.centerYAnchor, constant: 150).isActive = true
wishButton.heightAnchor.constraint(equalToConstant: 100).isActive = true
wishButton.widthAnchor.constraint(equalToConstant: 100).isActive = true

现在是这样的:

这很奇怪,因为其他两个 constraints 工作正常。可能只是一个愚蠢的错误,但我很新,感谢每一个帮助:)

【问题讨论】:

您能分享一下您的按钮当前外观的屏幕截图吗?另外,设置 v.clipsToBounds=true @KeshuRai 刚刚编辑了我的问题 :) 按钮是黑色方块,整个是wishButton 图像,还是里面有按钮的视图?如果您可以显示如何添加约束/呈现按钮的代码,这也会有所帮助。 【参考方案1】:

约束没有问题。问题在于图像。您的图像不够大,无法填满框架。您可以设置按钮的.setBackgroundImage,使其自动伸缩。

v.setBackgroundImage(UIImage(named: "wishButton"), for: .normal)

或者您可以使 content Alignment 在两个方向上都等于 .fill

【讨论】:

你说得对,这就是问题所在 :) @Ashmet Bhui 也说了,谢谢你们!【参考方案2】:

我注意到的一件事是您似乎没有设置按钮的框架

在初始化按钮后尝试添加这一行:

v.frame = CGRect(x: 0, y: 0, width: 100, height: 100)

我不确定是否需要,但如果您的按钮根本没有显示,这可能会解决问题

【讨论】:

我看到您发布了一张图片...哪个对象是看起来不正确的按钮?想要的外观是什么? 底部的圆圈。我只是想改变它的大小【参考方案3】:

将此添加到您的 UIButton 初始化中,它将起作用

v.contentVerticalAlignment = .fill
v.contentHorizontalAlignment = .fill

它将缩放您的图像。

let wishButton: UIButton = 
    let v = UIButton()
    v.setImage(UIImage(named: "wishButton"), for: .normal)
    v.translatesAutoresizingMaskIntoConstraints = false
    v.contentVerticalAlignment = .fill
    v.contentHorizontalAlignment = .fill
    v.addTarget(self, action: #selector(wishButtonTapped), for: .touchUpInside)
    return v
()

【讨论】:

就是这样 :) 非常感谢!

以上是关于Swift - UIButton 以编程方式设置约束的主要内容,如果未能解决你的问题,请参考以下文章

Swift:以编程方式在键盘上方添加 UIButton

以编程方式将 UIButton 居中到 Superview 类(Swift 3)

在 Swift 中以编程方式更改 UIButton 的文本(填充)

如何在 Swift 中以编程方式更改 UIButton 状态

如何在 Swift 中以编程方式调整 UIButton 中文本的字体大小以适应宽度?

Swift:以编程方式在 UICollectionViewCell 中的 IndexPath 中的多个 UIButton,下一个 addTarget 不单击