2012-06-02 18 views
1

我通過改變框架改變了UINavigationBar的高度。 但是,如果我將應用程序發送到後臺然後再打開它,它的高度會恢復到原始大小。我該如何解決這個問題?iPhone - 如何在輸入前景後恢復幀大小?

+0

你在哪裏改變它的高度?你在ViewController的viewDidLoad中做這個嗎? – self

+0

是的,在ViewdidLoad和ViewDidAppear也 – Oleg

+0

應該這樣做只有一次,將它從viewDidAppear – self

回答

0

您可以將框架寫入資源文件,如plist或XML文件。然後在-(void)applicationWillEnterForeground:(UIApplication *)application' or - (void)applicationDidBecomeActive:(UIApplication *)應用程序中加載應用程序委託文件中的plist。我相信你也可以使用NSUserDefaults的:

NSUserDefaults *frameSize = [NSUserDefaults standardUserDefaults]; 

//Put frame size into defaults 
[sharedDefaults setObject:navigationBar.frame forKey:@"frame"]; 
[sharedDefaults synchronize]; 

然後在上述應用程序的委託方法,你可以做這樣的事情:

self.viewController.navigationController.frame = [sharedDefaults objectForKey:@"frame"]; 

希望這有助於。如果它沒有,記得了投票。

----------- ------------編輯

如果你看一下這個問題iOS selected tab,它會告訴你如何確定選擇哪個選項卡。他們基本上說的是首先在應用程序委託中添加self.tabController.delegate = self,並確保應用程序委託和帶有選項卡的視圖控制器符合UITabBarControllerDelegate協議。然後在你的視圖控制器文件中使用標籤欄,你可以使用協議中定義的這個方法:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
    if (tabBarController.selectedIndex == 0) { 
    //The 0 is the first tab, but you can replace that with any other tab's index 

     //Here you say that when said tab is selected, the navigation controller's frame is the stored length. 
     self.navigationController.frame = [sharedDefaults objectForKey:@"frame"]; 
    } 
    else{ 
     self.navigationController.frame = CGRectMake(frame, for, other, tabs); 
    } 
} 
+0

我的應用程序有4個選項卡,UINavigationBar高度只能在其中一個選項卡中更改。我怎樣才能做到這一點? – Oleg

+0

我對標籤欄不是很熟悉,所以恐怕我現在不能幫你,但我會研究它。對不起 – pasawaya

+0

如果你想保留所有的標籤框架,你也可以把標籤索引保存在'NSUserDefaults'中,如果你想保留所有的標籤框架,你可以把它們保存在NSUserDefaults中,作爲包含NSNumber對象的NSMutableArray對象或者使用'NSMutableDictionary'等。希望這會給你一些啓發。 – relower