如何更改UIButton的大小

问题描述:

我正试图在iPhone应用程序中调整UIButton的大小。我有一个合成的UIButton,当我调用下面的代码时,它会在屏幕上移动,但按钮的高度不会改变。如何更改UIButton的大小

button.frame.size = CGRectMake(104, 68, 158, 70); 

例如,当我将高度(70)更改为40时,按钮的高度不会改变。但是,如果我更改x或y,它将在屏幕上移动。

任何想法?

上面的代码不应该编译;你正试图将一个CGRect分配给CGSize。问题在于属性的误导性。你在上面做的是类似于这样的:

[button frame].size = CGSizeMake(150, 70); 

很明显,这实际上并不会改变大小。你需要做的是抓住框架(或边界),修改它,然后设置它。试试这个:

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

我只是把你的代码上面的例子到我的应用程序(取代了我的代码),它本质上是做同样的事情,像我一样。它将按钮向上(垂直)移动到屏幕上,但不会改变它的大小。 我应该补充一点,当我将这个按钮拖到IB的视图中时,我将它设置为“Custom”按钮。我也在按钮上有一个背景图像,并且我将视图模式设置为“底部”。 我以前用其他语言做过这样的东西,我知道这很简单,但在屏幕上移动和改变大小的行为是非常奇怪的。 – Adam 2010-03-27 22:32:05

+0

您的按钮可能会更改尺寸,但您的位图不是。您可能想要为按钮的背景使用可拉伸图像,而不是固定图像。 – 2010-03-28 00:56:19

不应该是这样:

button.frame = CGRectMake(104, 68, 158, 70); 

即你正确地创建矩形,但你把它分配给的CGRect的大小元素称为帧,不整个CGRect。从CGGeometry.h:

struct CGPoint { 
    CGFloat x; 
    CGFloat y; 
}; 
struct CGSize { 
    CGFloat width; 
    CGFloat height; 
}; 
struct CGRect { 
    CGPoint origin; 
    CGSize size; 
}; 

或者更明确地,你可以写:

button.frame.size.width=158; 
button.frame.size.height=70; 
button.frame.origin.x=104; 
button.frame.origin.y=68; 

CGRect rect=CGRectMake(104, 68, 158, 70); 

[self.button setBounds:rect]; 

(必须声明为.H财产,并在.M合成按钮)

问题的一部分是您正在修改访问器方法的返回值,而不是使用setter。

button.frame具有欺骗性,它是点符号,意思是[button frame],它返回一个struct CGRect,然后您修改它,然后安静地丢弃这些更改。

为了修改实际框架,您将需要改为使用setter方法[button setFrame:],其中点符号仍为button.frame,但此次为左值,因此button.frame =不是button.frame.something =

如果你仍然得到运动行为,其原因的一部分可能是你的新X和Y值不符合旧的,并可能通过一些错误你的新尺寸值是相同的作为旧的。尝试300的宽度和300的高度仅用于踢腿。

要改变你做的按钮的大小:

[button setFrame:CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)]; 

例如

[button setFrame:CGRectMake(173, 269, 130, 44)]; 

确保复选框“使用自动布局”未在厦门国际银行文件或故事板设置。如果该选项已设置,则该命令不起作用。

+0

我只是因为你的提示而投了你的答案: **确保在Xib文件或故事板中没有设置“Use Autolayout”复选框。如果该选项已设置,则该命令不起作用。** – 2016-06-26 09:27:42

工作没有问题,只要自动布局和大小类被停用。 在我的测试中故事板具有只是一个按钮,他的动作发送到这个方法:

- (IBAction)action:(UIButton *)button { 
    button.frame = CGRectMake(0, 0, 158, 70); 
} 

检查你的故事板的属性。

enter image description here