【问题标题】:iPhone - How to restore frame size after entering foreground?iPhone - 进入前台后如何恢复帧大小?
【发布时间】:2012-06-02 21:36:44
【问题描述】:

我通过改变框架改变了UINavigationBar 的高度。 但是如果我将应用程序发送到后台然后再次打开它,它的高度会恢复到原来的大小。我该如何解决?

【问题讨论】:

  • 你在哪里改变它的高度?你是在 ViewController 的 viewDidLoad 中这样做的吗?
  • 是的,在 ViewdidLoad 和 ViewDidAppear 中也
  • 应该只做一次,从 viewDidAppear 中删除
  • 你找到解决方案了吗?

标签: iphone objective-c ios xcode cocoa-touch


【解决方案1】:

您可以将框架写入资源文件,如 plist 或 XML 文件。然后在 -(void)applicationWillEnterForeground:(UIApplication *)application' or-(void)applicationDidBecomeActive:(UIApplication *)application` 的应用程序委托文件中加载 plist。我相信你也可以使用 NSUserDefaults:

NSUserDefaults *frameSize = [NSUserDefaults standardUserDefaults];

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

然后在前面提到的 App Delegate 方法中,你可以这样做:

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

希望这会有所帮助,如果有帮助,请记得投票。

-----------编辑------------

如果您查看此问题iOS selected tab,它会告诉您如何确定选择了哪个选项卡。他们基本上说的是首先在应用程序委托中添加self.tabController.delegate = self,并确保应用程序委托和带有标签栏的视图控制器符合 UITabBarControllerDelegate 协议。然后在带有标签栏的 View Controller 文件中,您可以使用协议中定义的此方法:

- (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);
    }
} 

【讨论】:

  • 我的应用有 4 个选项卡,UINavigationBar 高度只能在其中一个选项卡中更改。我该怎么做?
  • 我对标签栏不是很熟悉,所以我现在恐怕帮不了你,但我会研究一下。对不起
  • 您也可以将NSUserDefaults中的标签索引保留为NSNumber,如果您想保留所有标签框架,您可以再次将它们保留在NSUserDefaults中作为NSMutableArrayobject,其中包含NSNumber 对象或使用NSMutableDictionary 等。希望能给你一些启发。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-20
  • 2016-08-25
  • 2016-10-22
  • 1970-01-01
  • 2011-03-04
  • 2011-10-05
  • 2013-07-03
相关资源
最近更新 更多