Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Can';t以编程方式在viewDidLoad中移动标签_Objective C_Ios_Viewdidload - Fatal编程技术网

Objective c Can';t以编程方式在viewDidLoad中移动标签

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

如果是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");
    }
}

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

- (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似乎对我有效。生命周期似乎很简单

  • LoadView()
  • viewDidLoad()
  • 视图将出现()
  • 视图显示()

  • 我认为调用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);希望,这就是你要找的东西。:)如果有任何问题,请让我知道……:)