2013-01-15 155 views
-3

我已經在導航欄上的更改意味着我有increasd導航欄&的高度做了一些自定義更改,它工作正常,但是當我最小化應用程序並再次最大化,這表明只有原來的高度是最小化後,我做了什麼變化,那些沒有工作,我的代碼是應用程序生命週期問題

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    NSLog(@" i m in didFinishLaunchingWithOptions"); 



    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"TopHeader"] forBarMetrics:UIBarMetricsDefault]; 
    [[UINavigationBar appearance] setFrame:CGRectMake(0, 0, 320, 55)]; 

    [[UINavigationBar appearance] setTitleVerticalPositionAdjustment:(-15.0) forBarMetrics:UIBarMetricsDefault]; 

    [[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: 
                  [UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], UITextAttributeTextColor, 
                  [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8],UITextAttributeTextShadowColor, 
                  [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], 
                  UITextAttributeTextShadowOffset, 
                  [UIFont fontWithName:@"HelveticaNeue-CondensedBlack" size:16.0], UITextAttributeFont, nil]]; 

return YES; 
} 

之後最大化去applicationDidBecomeActive這就是爲什麼我把上面的代碼中applicationDidBecomeActive但其沒有工作,爲什麼會這樣?
前減少
enter image description here
減少&再次最大化,它看起來像下面即高度再次自動設置爲44
enter image description here

更新後:我在書面下面的代碼在applicationWillEnterForeground

- (void)applicationWillEnterForeground:(UIApplication *)application 
{  
    UINavigationController *my=(UINavigationController * )self.window.rootViewController; 

    UINavigationBar *navigationBar = [my navigationBar]; 
    CGRect frame = [navigationBar frame]; 
    frame.size.height = 55.0f; 
    [navigationBar setFrame:frame]; 

    NSLog(@" i m in applicationWillEnterForeground"); 

    } 

調試時,當我寫它的描述它顯示高度是55.但在屏幕上它仍然看起來像第二個圖像。爲什麼發生這種情況。

+1

Downvoter plz care care to comment?不必要地downvoting不是一件好事 –

回答

1

我解決了這個問題,只是覆蓋UINavigationBar的&在LayoutSubViews設置的導航欄的高度。

@implementation UINavigationBar (customNAvigBar) 

- (void)layoutSubviews 
{ 
    [self setFrame:CGRectMake(0, 0, 320, 55)]; 
} 

@end 

這意味着每當我在吸引它會自動調用&集高度的導航欄。

4

當你的應用從後臺application:didFinishLaunchingWithOptions:打開不會被調用。您想要使用applicationWillEnterForeground:applicationDidBecomeActive:。查看UIApplicationDelegateprotocol reference瞭解更多信息。


編輯:在回答這個問題筆者的編輯,我會這樣說。我在我的一個應用程序中使用了這個代碼,並且我已經能夠重現這個問題。我已經嘗試了多種解決方案來解決這個問題,包括重置導航欄的框架UINavigationControllerlayoutSubviews。我建議創建一個重現此問題並將其提交給Apple的Bug記者的示例項目,或者創建一個重新定位和調整自身大小的UINavigationBar子類。

+2

不工作的方式不被調用,或不工作的導航欄高度是錯誤的意義? – MishieMoo

+0

方法正在調用,我通過NSLOg檢查,當它在應用程序中時,高度正在工作:didFinishLaunchingWithOption –

+0

不知道爲什麼這是downvoted?無論如何,我已經能夠在我一直在努力的應用程序中重現這種行爲。在最初的應用程序啓動後,我無法修改導航欄高度。這開始指向一個Apple bug。 – MishieMoo