我有一个简单的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