6

这似乎是一件很简单的事情,我不明白为什么会出错。我正在尝试UIButtontouchUpInside另一个处理程序更改 a 的大小。为了重现,我在 Xcode 中创建了一个新的 (iOS 6) 项目,并将两个按钮拖到默认创建的 xib 文件中。的touchUpInside处理程序button1如下所示。如果我只包含设置origin.xof的语句button2,我会看到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;
}

如何成功更改按钮的大小?

谢谢!

4

5 回答 5

7

确定您使用的是 AutoLayout,这里发生的只是 iOS AutoLayout 机制尝试自动设置您的布局。通过关闭 AutoLayout 来尝试您的代码。希望你知道如何在 xcode 中关闭自动布局,如果不告诉我。

快乐编码!!!

编辑:

AutoLayout 随 iOS 6 一起提供,这就是您的代码适用于旧版本(iOS 5)的原因。顺便说一句,正如尼克所说,您可以在 xcode 的文件检查器中关闭 AutoLayout。

请参阅随附的屏幕截图。

在此处输入图像描述

于 2013-01-15T08:55:10.580 回答
3

尝试 :

CGRect buttonFrame = button.frame;
buttonFrame.size = CGSizeMake(150, 70);
button.frame = buttonFrame;
于 2013-01-15T08:00:26.997 回答
0

使用边界:

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

无论自动布局是否打开都有效!与往常一样,确保您的插座设置正确,以便您可以与按钮通话。

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

顺便说一句,除非您使用它以手动方式定位对象,否则您永远不应该触摸按钮框架。Bounds 用于调整大小,frame 用于定位。

于 2015-03-23T00:54:07.497 回答
0

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

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

于 2017-02-01T13:11:02.870 回答
0

如果您尝试更改UIButton文本长度,您将受到默认长度的限制,并且当它太长时将执行换行符(即截断尾部或三个点)。通过以下方式更改默认大小:

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

这适用于大多数情况,但并非所有UIControlState情况

于 2018-01-31T19:35:24.707 回答