2010-03-27 96 views
12

我正試圖在iPhone應用程序中調整UIButton的大小。我有一個合成的UIButton,當我調用下面的代碼時,它會在屏幕上移動,但按鈕的高度不會改變。如何更改UIButton的大小

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

例如,當我將高度(70)更改爲40時,按鈕的高度不會改變。但是,如果我更改x或y,它將在屏幕上移動。

任何想法?

回答

20

上面的代碼不應該編譯;你正試圖將一個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

0

不應該是這樣:

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; 
2
CGRect rect=CGRectMake(104, 68, 158, 70); 

[self.button setBounds:rect]; 

(必須聲明爲.H財產,並在.M合成按鈕)

3

問題的一部分是您正在修改訪問器方法的返回值,而不是使用setter。

button.frame具有欺騙性,它是點符號,意思是[button frame],它返回一個struct CGRect,然後您修改它,然後安靜地丟棄這些更改。

爲了修改實際框架,您將需要改爲使用setter方法[button setFrame:],其中點符號仍爲button.frame,但此次爲左值,因此button.frame =不是button.frame.something =

如果你仍然得到運動行爲,其原因的一部分可能是你的新X和Y值不符合舊的,並可能通過一些錯誤你的新尺寸值是相同的作爲舊的。嘗試300的寬度和300的高度僅用於踢腿。

9

要改變你做的按鈕的大小:

[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

2

工作沒有問題,只要自動佈局和大小類被停用。 在我的測試中故事板具有隻是一個按鈕,他的動作發送到這個方法:

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

檢查你的故事板的屬性。

enter image description here