2012-10-07 67 views
13

我目前陷入了一個非常奇怪的問題。我正在使用iOS 6和Xcode 4.5。我有一個UIViewControllerUIButton的故事板。我對我的.h文件做了一個弱的UIButton插座。iOS無法更改UIButton框架

在.m文件中,我想更改按鈕的框架,但沒有任何反應。然而,我有一個UIImageView創建和連接方式與UIButton相同,但我可以改變UIImageView的框架沒有任何問題。

當我這樣做:

NSLog(@"%@", button) 

我得到這樣的輸出:

<UIButton: 0xa185a40; frame = (191 330; 73 44); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0xa185640>> 

而且這些都是我的代碼的相關部分:

-(void)viewDidLayoutSubviews{ 
    [self addStampGrid]; 
} 

-(void)addStampGrid { 

    // ... 

    [_button setFrame:CGRectMake(10,10,10,10)]; 
} 
+0

如何顯示更多的上下文? http://sscce.org – 2012-10-07 15:15:08

+0

在嘗試設置框架之前,請嘗試'NSLog(「%@」,按鈕);'並確保它不是零。我懷疑插座安裝不正確。 – lnafziger

+0

在NSLog中的hmmm'button'和setFrame中的'_button' –

回答

23

我有同樣的怪異使用XCode 4.5和iOS 6作爲部署目標的問題。雖然我不使用故事板。 我設法通過在Interface Builder中禁用選項「Use Autolayout」來解決它。 (在文件督察>界面生成文檔。

希望這有助於

+0

這似乎是一個快速黑客和壞主意。用@IBOutlets修改約束並修改button.layer.frame會更好。 – boidkan

6

從上海華刪除視圖和設置框架再次添加這一觀點作爲一個子視圖後,希望這將很好地工作......

+0

這確實對我有用,而不要求我完全關閉「使用Autolayout」。所以我可以在適當的時候混合使用自動佈局和手動計算。 +1! –

1

//從上海華卸下視圖

的UIButton

UIView *view = yourButton.superview; 
[yourButton removeFromSuperview]; 

//變化幀

CGRect bounds = view.bounds; 
yourButton.center = CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds)); 

//重新添加這一觀點作爲一個子視圖

[view addSubview:yourButton]; 
11

您可以使用此之前,改變的UIButton

[self.button.layer setFrame:] 

進口QuartzCore框架層的框架在你的類頭改變你的UIButton的框架。 這也適用於自動佈局。

+0

增值,它爲我工作。我不知道爲什麼這個問題以前被低估了。 – NSPratik

+0

這是正確的答案,是的。 –

7

您可以在此你可以設置你的按鈕的框架後,使用此

[_button setTranslatesAutoresizingMaskIntoConstraints:YES]; 



它可能會在日誌中提供有關約束的警告,因爲此屬性會覆蓋您在自動佈局中給出的約束。