viewdidLoad/viewDidAppear 问题

Posted

技术标签:

【中文标题】viewdidLoad/viewDidAppear 问题【英文标题】:viewdidLoad/ viewDidAppear issue 【发布时间】:2013-12-23 07:20:16 【问题描述】:

我正在加载一个从 web 服务获取数据的视图。因此,根据来自服务器的响应代码,如果响应代码为 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];
        
    


首先状态栏出现在顶部,然后在加载整个视图数据后,调整视图和status bar dropsdown by 20px,这看起来很奇怪。我可以在视图完全加载之前自动调整它吗?

任何想法/建议都将是可观的。

【问题讨论】:

哪个视图拥有状态栏?当前视图还是 ErrorView?? 那么,我的回答会解决你的问题。 【参考方案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)
   

【讨论】:

我试过你的代码。但是导航栏出现在 ios7.ios7 状态栏(20px)的状态栏上。

以上是关于viewdidLoad/viewDidAppear 问题的主要内容,如果未能解决你的问题,请参考以下文章

viewdidLoad/viewDidAppear 问题

何时实际调用 viewDidLoad / viewDidAppear? [复制]

在选项卡之间切换时 UITableView 不更新

iPhone - 使用哪种视图控制器方法