2013-06-05 48 views
0

我目前正在嘗試用一個放在.xib文件中的UIImageView表示的HP量表編程一個遊戲。我宣佈我的IBOutlet如下:UIImageView沒有正確更新邊界

@property (weak, nonatomic) IBOutlet UIImageView *hpGaugeView; 

並據此合成。它也鏈接到xib中的UIImageView實例。

在XIB,我hpGaugeView的長度設置爲188和高度爲9

現在,這是我做過什麼在viewDidLoad中:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 

    [hpGaugeView setFrame:CGRectMake(49, 18, 123, 9)]; 
    NSLog(@"%f, %f", [hpGaugeView frame].size.width, [hpGaugeView frame].size.height); 
} 

雖然NSLog的告訴我hpGaugeView的寬度爲123 ,當我運行它時,長度與xib中的長度相比沒有變化。所有其他的setFrame:或setBound:在其他viewControllers中都能正常工作,所以我只是想知道這裏發生了什麼。

這是竊聽我直了幾個小時一個小而關鍵的問題......

編輯: 當我關掉自動版式,調整大小工作;它創造了一堆其他問題,雖然...

+0

你在使用'AutoLayout'嗎?如果是這樣,'UIImageView'可能會被限制在*** nib ***中的固定大小,並且正在調整大小恢復到原始大小。 – msgambel

+0

這個工程!但我必須放棄所有的限制...... –

+0

嘗試在viewDidLayoutSubviews中設置框架與自動佈局 –

回答

0

我相信問題是,你沒有改變UIImageView的框架。邊界是指在它自己的座標系中視圖的位置和大小,而框則是指它在超視圖座標系中的位置和大小。 如果clipsToBounds屬性設置爲YES,那麼視圖框架外的任何內容都將不可見。

+0

我嘗試使用setFrame:太,但它仍然無法正常工作。更新後的代碼是 [hpGaugeView setFrame:CGRectMake(49,18,123,9)]; 但仍不顯示更改。 當我關閉autoLayout時,我可以通過setFrame處理它。 –

0

事實證明,它是筆尖和代碼之間的一些奇怪的奇怪交互......當我以編程方式創建UIImageView時,它工作正常。

3

自動佈局打開時,在viewDidLoad過程中子視圖還沒有鋪好。約束被一個比特以後計算並且可以重寫viewDidLayoutSubviews方法來設置幀:

- (void)viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 

    // Do any additional setup after subviews are laid. 
    [hpGaugeView setFrame:CGRectMake(49, 18, 123, 9)]; 
    NSLog(@"%f, %f", [hpGaugeView frame].size.width, [hpGaugeView frame].size.height); 
} 

從類參考:

viewDidLayoutSubviews

通知視圖控制器,其視圖只是列出了它的子視圖。

0

AutoLayout屬性只在IOS 6.0以上工作。將控件拖動到XIB而不是您可以通過代碼創建UIImageView並添加到當前視圖。我已經給出了以編程方式添加UIImageView的代碼。

源代碼:

// .h file 
@property (weak, nonatomic) UIImageView *hpGaugeView; 

//.m file 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    hpGaugeView = [[UIImageView alloc] init]; 

    [hpGaugeView setFrame:CGRectMake(49, 18, 123, 9)]; 

    [self.view addSubview:hpGaugeView]; 

} 

初始化並添加hpGaugeView通過編程的viewDidLoad中函數內部子視圖。