viewdidLoad / viewDidAppear问题

时间:2013-12-23 07:20:16

标签: iphone ipad xcode5

我正在加载一个从webservices获取数据的视图。因此,根据服务器的响应代码,如果响应代码为400,我会显示当前视图或重定向到另一个视图(ErrorView)。但是我没有被重定向到ErrorView并在控制台中找到一条消息"Attempt to present <ErrorView: 0xe332f30> on ViewController while a presentation is in progress!"

在谷歌搜索后,我发现将vieDidLoad代码放到viewDidAppear 放置完整个代码后,它会重定向到错误视图并正常工作。但在状态栏问题的ios7中,我使用了代码

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
  if(responsecode==200)
   {
       //load current view
   }
  else
   {
     //Load anotherview(ErrorView)
   }
   float systemVersion=[[[UIDevice currentDevice] systemVersion] floatValue];
    if(systemVersion>=7.0f)
    {
        CGRect tempRect;
        for(UIView *sub in [[self view] subviews])
        {
            tempRect = [sub frame];
            tempRect.origin.y += 20.0f; 
            [sub setFrame:tempRect];
        }
    }

}

首先,状态栏显示在顶部,然后在加载整个viewdata之后,视图会被调整,status bar dropsdown by 20px看起来很奇怪。我可以在视图加载之前自动调整它吗?

任何想法/建议都会很明显。

1 个答案:

答案 0 :(得分:1)

我认为,您应该将此代码分开

-(void)viewDidLoad
{
    float systemVersion=[[[UIDevice currentDevice] systemVersion] floatValue];

    if(systemVersion>=7.0f)
    {
        CGRect tempRect;
        for(UIView *sub in [[self view] subviews])
        {
            tempRect = [sub frame];
            tempRect.origin.y += 20.0f; 
            [sub setFrame:tempRect];
        }
    }
}

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
  if(responsecode==200)
   {
       //load current view
   }
  else
   {
     //Load anotherview(ErrorView)
   }
}