2013-01-15 53 views
6

這看起來很簡單,我不明白爲什麼會出錯。我試圖從另一個的touchUpInside處理程序更改UIButton的大小。爲了複製,我在Xcode中創建了一個新的(iOS 6)項目,並將兩個按鈕拖到默認創建的xib文件中。下面顯示了button1touchUpInside處理程序。如果我只是包括設置origin.xbutton2的聲明,我看到button2按預期方式移動。但是,設置按鈕size.width的聲明不起作用。實際上,如果我包括那個陳述,原點也不會改變。無法更改UIButton的大小

我可以調整在廈門國際銀行設計的按鈕罰款,我設置的唯一屬性(除

- (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

我已經嘗試過了,你的代碼似乎是實際工作。你確定這個幀改變與按鈕的圖像/背景圖像無關嗎?而且,按鈕類型是什麼? –

+0

self.button2在該方法中可能爲零。檢查..你可以從發件人按下的按鈕引用.. –

+0

尤努斯,我創建了一個新的項目,並添加了一個圓形矩形默認xib repro這個。沒有圖像(背景或前景)。 Anusha:它不是零,也不適用於其他按鈕。 – mcobrien

回答

7

爲確保您使用的自動版式,乾脆什麼HAPP這裏是iOS AutoLayout機制嘗試自動設置您的佈局。通過關閉AutoLayout來嘗試您的代碼。希望你知道如何關閉xcode中的自動佈局,如果不讓我知道。

快樂編碼!

編輯:

自動版式自帶的iOS 6,這就是爲什麼你的代碼與舊版本(iOS 5的)工作。順便說一句,尼克說,你可以在Xcode的文件檢查器中關閉AutoLayout。

查看附件截圖。

enter image description here

+0

我想知道AutoLayout是否可能導致此問題。它似乎從未發生過我的iOS 5項目。我將如何禁用它,或者(更好),什麼是正確的方式來使它與AutoLayout一起工作? – mcobrien

+1

您可以在Interface Builder的文件檢查器中關閉自動佈局 – Nick

+1

就是這樣,非常感謝!我還發現,如果我想繼續使用AutoLayout(它聽起來不錯,我不想在沒有學習更多的情況下拒絕它),我可以固定按鈕的寬度(選擇它,然後單擊「在IB設計器右下角的「H」按鈕),爲我剛添加的約束添加一個插座,並調整其常量屬性以在運行時以編程方式更改寬度。這很複雜(也許有一種更簡單的方法?),但我很高興它開始有意義。 – mcobrien

3

嘗試:

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

如果啓用了自動佈局功能,將無法工作 – Groot

0

與工作的界限:

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

作品是否自動佈局上!一如既往,確保您的Outlet設置正確,以便您可以與按鈕交談。

你也可以在自動佈局中做到這一點。刪除寬度和高度約束並添加新的約束,但如果您的按鈕沒有寬度或高度約束(可能是明智的),那麼只需設置邊界,除非您需要重新定位按鈕,它應該只是作爲當您更改按鈕邊界時,自動佈局會自動更新約束。

順便說一句,除非您使用它來以手動方式定位對象,否則不應該觸摸按鈕框架。邊界是用於確定尺寸的,框架用於定位。

0

禁用自動佈局可能不是您想要的解決方案。

一種可能性是你設置按鈕歸屬標題之前,現在只是改變標題字體大小將無法正常工作。您需要再次設置分配標題

0

如果您試圖更改UIButton文本長度,則會受到默認長度的限制,並且其時間太長會導致換行(即截斷尾或三個點)。通過更改默認大小:

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

這將在大多數情況下工作,但不是所有的UIControlState小號