2014-05-05 65 views
3

我使用UIPageViewController顯示少量控制器,第一個是UINavigationController,一見鍾情,看起來不錯,但是當你滾動到下一個時,第一個導航欄改變高度,並將標題直接放在狀態欄下。我已經搜索了堆棧溢出,但找不到我的問題的任何答案。UIPavigationController UIPageViewController內部垂直滾動,導航條高度不對

簡單的演示:https://github.com/augard/PageScrollingBug

+0

你解決了這個問題嗎? – longilong

+0

是/否,我停止使用導航控制器,它在您將視圖控制器中的UINavigationBar添加爲視圖時起作用 – Augard

回答

0

我在一個非常哈克的方式解決了這個問題 - 子類UINavigationController和攪和其navigationBarsetCenter:方法(與Aspects庫混寫完成):

// 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]; 
} 

我也不得不在導航控制器的子控制器中設置automaticallyAdjustsScrollViewInsetsNO,否則導航欄在第一次出現時仍然會出現錯誤的位置:

// In child controller of UINavigationController. 
self.automaticallyAdjustsScrollViewInsets = NO; 

也許有正確的做法,但我沒有時間。