UIPageViewController内部的UINavigationController具有垂直滚动,导航栏高度损坏

时间:2014-05-05 11:43:51

标签: ios cocoa-touch ios7 uikit uipageviewcontroller

我使用UIPageViewController来显示几个控制器,第一个是UINavigationController,第一眼看上去很好看,但当你滚动到下一个时,第一个导航栏会改变高度,并将标题直接放在状态栏。我已经搜索过堆栈溢出但无法找到问题的答案。

简单演示:https://github.com/augard/PageScrollingBug

1 个答案:

答案 0 :(得分:0)

我以一种非常黑客的方式解决了这个问题 - 子类化了UINavigationController并且调整了navigationBar的{​​{1}}方法(使用Aspects库进行了调整):

setCenter:

我还必须在导航控制器的子控制器中将// In subclassed UINavigationController: - (void) viewDidLoad { [super viewDidLoad]; // This just fixes this bug: http://stackoverflow.com/q/23471624/299063 UINavigationBar *navigationBar = self.navigationBar; [navigationBar aspect_hookSelector:@selector(setCenter:) withOptions:AspectPositionInstead usingBlock:^(id<AspectInfo> aspectInfo) { NSValue *centerValue = aspectInfo.arguments[0]; CGPoint center = [centerValue CGPointValue]; CGPoint fixedCenter = CGPointMake(center.x, 20 + navigationBar.bounds.size.height/2); [[aspectInfo originalInvocation] setArgument:&fixedCenter atIndex:2]; [[aspectInfo originalInvocation] invoke]; } error:nil]; } 设置为automaticallyAdjustsScrollViewInsets,否则导航栏最初会出现错误位置:

NO

可能有正确的方法,但我没有时间。