Objective c Can';t以编程方式在viewDidLoad中移动标签
如果是iPhone 5(4英寸屏幕),我尝试将uiLabel向下移动一点。但是当代码在viewDidLoad中时,它不起作用。如果我通过单击uiButton调用代码,它会起作用。下面是代码:Objective c Can';t以编程方式在viewDidLoad中移动标签,objective-c,ios,viewdidload,Objective C,Ios,Viewdidload,如果是iPhone 5(4英寸屏幕),我尝试将uiLabel向下移动一点。但是当代码在viewDidLoad中时,它不起作用。如果我通过单击uiButton调用代码,它会起作用。下面是代码: -(void) viewDidLoad { if(CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136))) { CGRect frame = [self.timeOnCur
-(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");
}
}
也许这是你需要注意的事情
- (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仍然为零
我不知道我的练习是否是最好的
我总是在控制器的init方法中初始化子视图。
在[self-viewdiload]中执行[self.view addSubview:_subview](//或任何需要self.view的方法调用);乔纳,你在viewwillbeen方法中尝试过你的代码了吗?可能,它会解决你的问题。viewdiew似乎对我有效。生命周期似乎很简单
我认为调用viewDidLoad时帧尚未设置,请在ViewDidApparAnimated中尝试:是否有可能帧实际上正在设置,但您没有注意到它?将更新包装在动画块中,并稍微延迟它的执行,这应该可以清楚地显示发生了什么。只需使用performSelector:withObject:afterDelay:to用另一种方法调用帧设置代码来修复它。@CodaFi很有趣。如果我使延迟为.1,它会向下移动,然后再向上移动。如果它使延迟为.6-.7,它会出现并快速向下移动。因此,这一定意味着它是在帧被调用之前被调用的set@JonahKatz,是的。viewDidLoad和awakeFromNib并不意味着对e视图要生效,它们用于在渲染缓冲区绘制到屏幕之前进行设置。@CodaFi那么您建议我做什么?好的,让我用一个示例代码进行尝试,并将相应地更新您。我在viewDidLoad中尝试了下面的代码,效果很好。请查看此代码。NSString str1=[NSString stringWithFormat:@%f“,[[[UIDevice currentDevice]系统版本]浮点值]];NSArray testArr=[str1组件由字符串分隔:@.”;如果([[testArr ObjectatinIndex:0]isEqual:@“5”]){CGRect frame=[testLbl frame];frame.origin.y+=40;//78[testLbl setFrame:frame];}NSLog(@“我的测试标签的y是:->%d”,(int)testLbl.frame.origin.y);希望,这就是你要找的东西。:)如果有任何问题,请让我知道……:)