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 问题的主要内容,如果未能解决你的问题,请参考以下文章