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

问题描述 投票:0回答:3

如果是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");
    }
}
objective-c ios viewdidload
3个回答
0
投票

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


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,所以在正常视图循环之前需要其视图,因此,在这种情况下,self.timeOnCurrentQuestion在viewDidload方法中仍然为nil。

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.