我有一個簡單的UIViewController,它有一個對應的.xib文件。在uiviewcontroller加載後更新xib視圖的位置?
ViewController *v = [[ViewController alloc] initWithNibName:@"ViewController" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:v animated:YES];
在此的.xib文件,我有一個UILabel,其被定位在屏幕的中間。我想一旦視圖被加載到這個標籤移動到新的位置,但在此之前它是可見:
label.center = CGPointMake(0,0);
當我嘗試把上面的代碼在下面的方法,這是發生了什麼:
initWithNibName:bundle
:位置不更新awakeFromNib
:位置不更新viewDidLoad
:位置不更新viewWillAppear
:位置不更新viewDidAppear
:位置僅在視圖完全加載後纔會更新(即,標籤的原始位置可以在瞬間看到)。
,當我嘗試更新的東西,如文本屬性:
label.text = @"Foo";
...它適用於所有的這些方法。出於某種原因,它只是被.xib文件覆蓋的位置。
當我說「位置不更新」時,我的意思是當屏幕上顯示標籤時,它位於.xib文件中定義的位置,而不是我試圖覆蓋它的位置。
當我嘗試NSLog
的位置時,它表明它正確更新它,但是當我再次檢查位置viewDidAppear
時,它顯示不正確的值。例如,說的.xib在99定義了X,我想將它更改爲0:
- (void)viewWillAppear:(BOOL)animated {
label.center = CGPointMake(0,0);
NSLog(@"%f", label.center.x); // reports 0
}
- (void)viewDidAppear:(BOOL)animated {
NSLog(@"%f", label.center.x); // reports 99 (Error: should be 0)
label.center = resultLabelHiddenCenter;
NSLog(@"%f", label.center.x); // reports 0
}
如何我可以更新標籤的中心,沒有任何毛刺視覺顯示視圖前?
您是否在使用autolayout? – 2013-03-17 06:55:06