无法在viewDidLoad中以编程方式移动标签

时间:2012-11-29 01:45:25

标签: objective-c ios viewdidload

我试图将uiLabel向下移动,如果它是iphone 5(4“显示器)。但是当代码在viewDidLoad中时它不起作用。如果我通过单击uiButton来调用代码,它就可以工作。继承人的代码:

-(void) viewDidLoad {
    if(CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136))) {
        CGRect frame = [self.timeOnCurrentQuestion frame];
        frame.origin.y += 40;  // change the location
        [self.timeOnCurrentQuestion setFrame:frame];
        nslog(@"This DOES get logged");
    }
}

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

也许这是你需要注意的事情。

- (void)viewDidLoad 

当控制器juz创建其视图时,这是一种方法。

例如: 也许在你的init方法中,你可以调用类似的东西:

[self.view setBackground:[UIColor redColor]];
self.timeOnCurrentQuestion = [[UIView alloc] initWithFrame:kFrame];

在这种情况下,工作流程将如下所示:

[self.view setBackground:[UIColor redColor]];
[self viewDidload];
self.timeOnCurrentQuestion = [[UIView alloc] initWithFrame:kFrame];

这个工作流程的原因是因为调用了self.view,然后在正常视图循环之前需要它的视图,因此,在这种情况下,view.Danl​​oad方法中的self.timeOnCurrentQuestion仍为零。

我不知道我的练习是否是最好的。

我总是在控制器的init方法中初始化subView。 并在[self viewDidload]中执行[self.view addSubview:_subview](//或需要self.view的所有方法调用);

答案 1 :(得分:0)

Jonah,您是否在viewWillAppear方法中尝试过代码?可能,它会解决你的问题。

答案 2 :(得分:0)

viewDidAppear为我工作。生命周期似乎是

  1. 的loadView()
  2. viewDidLoad中()
  3. viewWillAppear中()
  4. viewDidAppear()