0

如果它是 iPhone 5(4" 显示器),我正在尝试将 uiLabel 向下移动。但是当代码在 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");
    }
}
4

3 回答 3

1

Jonah,你在 viewWillAppear 方法中尝试过你的代码吗?也许,它会解决你的问题。

于 2012-11-29T04:33:34.213 回答
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,然后在正常的视图周期之前需要它的视图,所以,在这种情况下,viewDidload方法中的self.timeOnCurrentQuestion仍然是nil。

我不知道我的做法是不是最好的。

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

于 2012-11-29T03:04:09.777 回答
0

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

  1. 加载视图()
  2. viewDidLoad()
  3. viewWillAppear()
  4. viewDidAppear()
于 2014-05-19T14:44:18.323 回答