UINavigationController永久地将视图提升20个点,保留UINavigatinBar透明度

时间:2011-11-27 19:57:48

标签: objective-c coding-style uiview uinavigationcontroller uitabbar

我的应用程序中有一个UINavigationController和一个UITabBar。

UINavigationController有一个半透明的黑色导航栏,如下所示:

在app delegate中:

[[UINavigationBar appearance] setBarStyle:UIBarStyleBlackTranslucent];
    [[UINavigationBar appearance] setAlpha:0.7];

我也隐藏了状态栏并在UINavigationBar的透明下半部分显示了我自己对状态栏的解释,如下所示:

  self.navigationController.view.frame = CGRectMake(0,-22,320,480);

一旦应用程序加载,这个工作正常:UINavigationbar的下半部分是透明的,我可以在那里显示我自己的状态指示器。

但是,一旦我点击任何TabBar选项卡然后返回到原始控制器,就会发生以下两件事: 由UINavigationController管理的视图向下移动到从UINavigationBar的下半部分开始。 UINavigationBar不再透明。 这会将我的UI布局打破~20-22像素。

如何“说服”我的用户界面记住它的原始布局,而不是在选择不同标签时重置为想要的内容?

谢谢。

1 个答案:

答案 0 :(得分:1)

我最好的建议是不要自定义构建所有内容,但由于您似乎要完成创建自定义视图的所有工作,我会尝试以下操作:

  1. 确保您没有代码任何地方,在您将新修改后的内容更改原始视图。
  2. 测试在没有任何内容的空标签之间来回切换,看看原始视图中是否有任何变化。
  3. 如果所有其他方法都失败了,那么当您调用代码以关闭新选项卡并返回到原始视图时,请重新运行用于设置视图的所有先前代码。如果您将所有代码更改为条形图“构造函数”中的视图,则可以使自己和系统更容易。

    然后您需要做的就是

    -(void)ChangeTabs
    {
        [UINavigationController dealloc];
        [UINavigationController alloc];
        [UITabView dealloc];
        [UITabView alloc];
    }
    
    像这样简单的东西可以解决你的问题并且仍能高效运行。这取决于你,但我肯定会考虑转向后者,特别是如果你只是为了正确设置两个条而运行多个步骤。

    希望这会对你有所帮助。