无法更改UIButton的大小

6
这似乎是一件很简单的事情,我不明白为什么会出现问题。我正在尝试从另一个按钮的touchUpInside处理程序中更改UIButton的大小。为了重现,我在Xcode中创建了一个新的(iOS 6)项目,并将两个按钮拖动到默认创建的xib文件中。下面显示了button1touchUpInside处理程序。如果我只包含设置button2origin.x的语句,我会看到button2按预期移动。但是,设置按钮的size.width的语句不起作用。实际上,如果我包含该语句,则原点也不会改变。

我可以在xib设计器中很好地调整按钮的大小,除了

- (IBAction)buttonPressed:(id)sender {
    CGRect f = self.button2.frame;
    f.origin.x += 10;
    // this doesn't work, including it prevents even the origin change from working
    f.size.width += 10; 
    self.button2.frame = f;
}

我该如何成功地改变按钮的大小?

谢谢!


1
我已经尝试过了,你的代码似乎真的可以工作。你确定这个框架变化与按钮的图像/背景图像无关吗?还有,按钮类型是什么? - Yunus Nedim Mehel
在该方法中,self.button2可能为空。请检查一下。您可以从发送者那里获取按下按钮的引用。 - Anusha Kottiyal
Yunus,我创建了一个新项目,并在默认的xib中添加了一个圆角矩形来重现这个问题。没有图像(背景或前景)。Anusha:它不是nil,并且它也不能与其他按钮一起使用。 - mcobrien
5个回答

7
当然,您正在使用AutoLayout,这里的问题是iOS AutoLayout机制尝试自动设置您的布局。尝试关闭AutoLayout来测试您的代码。希望您知道如何在Xcode中关闭自动布局,如果不知道,请告诉我。
祝编程愉快!
编辑:
AutoLayout随iOS 6一起提供,这就是为什么您的代码在旧版本(iOS 5)上可以工作的原因。另外,正如Nick所说,您可以在xcode的文件检查器中关闭AutoLayout。
请参见附图。 enter image description here

我在想是不是AutoLayout引起了这个问题。在我的iOS 5项目中似乎从未发生过这种情况。我该如何禁用它,或者更好的方法是什么,以便与AutoLayout一起正常工作? - mcobrien
1
您可以在Interface Builder的“文件检查器”中关闭自动布局。 - Nick
1
就是这样,非常感谢!我还发现,如果我想继续使用AutoLayout(听起来很不错,我不想在没有学习更多的情况下拒绝它:),我可以固定按钮的宽度(选择它,然后单击IB设计器右下角的小“H”按钮),为我刚刚添加的约束添加一个插座,并调整其常量属性以在运行时编程更改宽度。这相当复杂(也许有更简单的方法?),但我很高兴它开始变得清晰了。 - mcobrien
有没有可能只为这些按钮禁用自动布局? - Bagusflyer

3

尝试:

CGRect buttonFrame = button.frame;
buttonFrame.size = CGSizeMake(150, 70);
button.frame = buttonFrame;

0

使用边界:

[self.button setBounds:CGRectMake(0, 0, 400, 400)];

无论自动布局是否开启,都可以正常工作!像往常一样,请确保您的 Outlet 正确设置,以便您可以与按钮进行交互。

您也可以在自动布局中执行此操作。删除宽度和高度约束,并添加新的约束,但如果您的按钮没有宽度或高度约束(可能是明智的选择),则只需设置边界,除非您需要重新定位按钮,否则自动布局将在更改按钮边界时自动更新约束。

顺便说一句,除非您要手动定位对象,否则永远不应该触摸按钮框架。边界用于调整大小,框架用于定位。


0

禁用自动布局可能不是您想要的解决方案。

一个可能性是您在设置按钮属性标题之前,现在仅更改标题字体大小不起作用。您需要再次设置AttributedTitle


0

如果你试图更改UIButton的文本长度,你将受到默认长度的限制,当长度过长时,会实现换行(即截断尾部或三个点)。通过以下方式更改默认大小:

yourButton.setTitle("yourString", for: UIControlState.normal)

这对大多数情况都有效,但并不适用于所有UIControlState


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