我确定我的导航栏不是半透明的,我已将其添加到我的viewDidLoad中,因此带有提示的导航栏在首次显示时不会与我的视图重叠:
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone;
这很有效,直到我导航到一个没有提示的导航栏的视图控制器,然后弹回。当带有提示的导航栏重新显示时,导航栏使用一些内部动画向下延伸到其完整大小(在调用viewDidAppear之后!),并且我的视图与30像素差异部分重叠。关于我能做些什么的任何想法?
答案 0 :(得分:2)
我讨厌这样的解决方案。但我的解决方法仅适用于iOS7,将视图的frame.origin.y与viewDidAppear中导航栏的frame.origin.y + frame.size.height进行比较。如果它们不同,我会调整视图大小并重新定位视图,使动画看起来不那么愚蠢。该视图还有一个滚动视图作为子视图,所以我必须稍微调整一下:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
CGRect nbFrame = self.navigationController.navigationBar.frame;
__block CGRect vFrame = self.view.frame;
__block CGFloat diff = nbFrame.size.height + nbFrame.origin.y - vFrame.origin.y;
if (diff > 0.0) {
__block CGSize size = scrollView.contentSize;
[UIView animateWithDuration:UINavigationControllerHideShowBarDuration
delay:0.0
options: UIViewAnimationOptionCurveEaseOut
animations:^{
vFrame.origin.y += diff;
vFrame.size.height -= diff;
self.view.frame = vFrame;
size.height -= diff;
scrollView.contentSize = size;
}
completion:^(BOOL finished){
NSLog(@"Done!");
}];
}
}
}
答案 1 :(得分:1)
如果您还没有使用autolayout。请尝试为此设置delta。