我有一个视图控制器,按下按钮后,使用隐藏导航栏

[self.navigationController setNavigationBarHidden:true animated:YES];

并显示我取消隐藏的另一个视图 .

prior to hiding

我隐藏了导航栏,因为看起来我无法取消隐藏任何视图 .

after hiding and putting view in front

无论如何,我注意到隐藏导航栏后所有子视图都向上移动,所以我为所有子视图做了以下操作

// shift subviews down b/c of offset
CGRect categorizationSearchBarFrame = _categorizationSearchBar.frame;
categorizationSearchBarFrame.origin.y += IOS_7_OFFSET;
_categorizationSearchBar.frame = categorizationSearchBarFrame;

CGRect collectionViewFrame = _collectionView.frame;
collectionViewFrame.origin.y += IOS_7_OFFSET;
_collectionView.frame = collectionViewFrame;

我记得在导航到其他视图控制器时取消隐藏导航栏并存储“导航隐藏状态”,因此我可以重新创建状态 .

但是,当我回来并检测到“隐藏状态”时

viewWillAppear

并继续执行相同的取消隐藏,偏移程序,子视图仍然似乎向上移动 .

subviews still seems to be shifted upwards even after running code to shift them down

只有当我把恢复代码放进去的时候

viewDidAppear

状态是否正确恢复 . 但由于视图已经出现在屏幕上,因此会出现令人讨厌的故障 . 在进行任何偏移更改之前是否必须显示视图?会喜欢别人的意见 . 谢谢 .