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

Ios 使用Swift以编程方式更改UIButton的大小,ios,swift,uibutton,Ios,Swift,Uibutton,我知道以前有人问过这个问题,但我似乎无法解决任何问题。我用AutoLayout设置了我的按钮,但为了让它们适合iPhone4,我需要将它们缩短 我在viewDidLoad、ViewDidDisplay和viewDidLayoutSubviews中尝试过这一点(只要它能工作,我真的不在乎它去哪里) print语句执行正确,因此我知道这是可行的。我已经为所有四个按钮选中了“在构建时删除占位符”选项。我已经尝试完全从AutoLayout中的按钮中删除高度约束(这无关紧要,我只是想避免XCode对我大喊

我知道以前有人问过这个问题,但我似乎无法解决任何问题。我用AutoLayout设置了我的按钮,但为了让它们适合iPhone4,我需要将它们缩短

我在viewDidLoad、ViewDidDisplay和viewDidLayoutSubviews中尝试过这一点(只要它能工作,我真的不在乎它去哪里)

print语句执行正确,因此我知道这是可行的。我已经为所有四个按钮选中了“在构建时删除占位符”选项。我已经尝试完全从AutoLayout中的按钮中删除高度约束(这无关紧要,我只是想避免XCode对我大喊大叫)。完全以编程方式创建所有四个按钮似乎很乏味,但如果没有其他选择,这是可行的,但我觉得我尝试做的应该不会太难。值得一提的是,如果我将完全相同的代码应用于图像,它就会工作。只是不是我的纽扣


有一种更好的方法可以做到这一点,它可以防止您对约束的混淆。将其设为按钮子类并覆盖
intrinsicContentSize
。现在,按钮将自身调整为正确的大小,您可以保留所有其他约束。

在Interface Builder中,为每个按钮的高度创建实际约束(而不是占位符),并为约束创建插座集合

for heightConstraint in heightConstraintsForChoiceButtons! {
    if smallScreen {
        heightConstraint.constant = 15
        println("small")
    } else {
        heightConstraint.constant = 55
        print("big")
    }
}

您需要操纵约束常量本身。将高度限制链接到代码,然后执行以下操作:
heightConstraint.constant=x


将此代码放入
viewDidLayoutSubviews

可能是一个比我的更好的解决方案,但在设置其他约束时需要技巧,这样您就不会强制压缩或拥抱按钮。恐怕我不明白这个答案;这是我的第一个应用程序。这很有效!我不知道高度限制可能是出口,尽管我想这是有道理的。这改变了一切!格雷西亚斯!我说得太快了;它适用于单个高度约束,但尝试循环通过这些约束会得到一个
'nslayoutcontracint'没有名为generator的成员。
@thumbtack您需要使用outlet集合<代码>@IBOutlet var heightConstraintsForChoiceButtons:数组或
@IBOutlet var heightConstraintsForChoiceButtons:[NSLayoutConstraint]
for heightConstraint in heightConstraintsForChoiceButtons! {
    if smallScreen {
        heightConstraint.constant = 15
        println("small")
    } else {
        heightConstraint.constant = 55
        print("big")
    }
}