使用Swift编程以编程方式更改UIButton的大小。

3

我知道这个问题以前已经被问过了,但是似乎我无法让任何解决方案起作用。 我已经使用AutoLayout设置了我的按钮,但是为了使它们适合iPhone 4,我需要将它们缩短。

我尝试了以下代码,分别在viewDidLoad、viewDidAppear和viewDidLayoutSubviews中尝试(只要它能工作,我不在乎它放在哪里)

for button in choiceButtons! {
    if smallScreen {
        button.frame = CGRect(x: button.frame.origin.x, y: button.frame.origin.y, width: button.frame.width, height: 15)
        println("small")
    } else {
        button.frame = CGRect(x: button.frame.origin.x, y: button.frame.origin.y, width: button.frame.width, height: 55)
        button.frame.size.height = 55 //second attempt (what I'd really like to work)
        print("big")
    }
}

打印语句正在正确执行,所以我知道它有效。我已经为所有四个按钮勾选了“在构建时删除占位符”选项。我尝试完全从AutoLayout中删除按钮的高度约束(这是无关紧要的,我只是想让XCode不再警告)。如果没有其他选择,完全通过编程创建所有四个按钮似乎很繁琐但可行,但我觉得我正在尝试做的事情不应该太难。值得一提的是,如果将完全相同的代码应用于图像,则可以正常工作。只是我的按钮不行。 如何使用Swift更改按钮的高度? 无法通过编程更改UIButton的框架。?
3个回答

5
在Interface Builder中,为每个按钮的高度创建真实的约束(而不是占位符),并为约束创建一个输出集合。
for heightConstraint in heightConstraintsForChoiceButtons! {
    if smallScreen {
        heightConstraint.constant = 15
        println("small")
    } else {
        heightConstraint.constant = 55
        print("big")
    }
}

这个可行!我不知道heightConstraints可以成为outlets,虽然我猜这很有道理。这改变了一切!谢谢! - thumbtackthief
我说得太早了;它可以使用单独的高度约束,但尝试循环遍历它们会出现“'NSLayoutContraint'没有名为generator的成员”的错误。 - thumbtackthief
1
@thumbtackthief 你需要使用一个插座集合。@IBOutlet var heightConstraintsForChoiceButtons: Array<NSLayoutConstraint>! 或者 @IBOutlet var heightConstraintsForChoiceButtons: [NSLayoutConstraint]! - Jeffery Thomas

2

有一种更好的方法来做这件事,它可以避免您在约束方面遇到的困惑。将其作为按钮子类并覆盖intrinsicContentSize。现在按钮将自行调整大小以适应正确大小,您可以保留所有其他约束。


可能比我的解决方案更好,但在设置其他约束条件时需要技巧,以免强制压缩或挤压按钮。 - Jeffery Thomas
很抱歉,我没有明白这个答案;这是我的第一个应用程序。 - thumbtackthief

1
你需要操作约束常量本身。将您的高度约束链接到代码,并执行以下操作:
heightConstraint.constant = x
将此代码放在 viewDidLayoutSubviews 中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接