【问题标题】:UINavigationController raise the view by 20 points permanently, preserve UINavigatinBar transparencyUINavigationController 将视图永久提升 20 点,保持 UINavigationBar 透明度
【发布时间】:2023-03-15 05:53:02
【问题描述】:

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

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

在应用委托中:

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

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

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

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

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

如何“说服”我的 UI 记住它的原始布局,而不是在选择不同的选项卡时重置为它想要的任何布局?

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    1. 确保在您放入新的编辑后,没有任何代码任何地方会更改原始视图。
    2. 测试在没有任何内容的空选项卡之间来回切换,看看原始视图中是否有任何变化。

    如果所有其他方法都失败了,那么当您调用代码以关闭新选项卡并返回到原始视图时,请重新运行之前用于设置视图的所有代码。如果您将所有用于更改视图的代码放在栏的“构造函数”中,您可以让您自己和系统更轻松。

    那么你要做的就是

    -(void)ChangeTabs
    {
        [UINavigationController dealloc];
        [UINavigationController alloc];
        [UITabView dealloc];
        [UITabView alloc];
    }
    

    像这样简单的事情可以解决您的问题,并且仍然可以高效运行。这取决于您,但我肯定会考虑转向后者,特别是如果您运行多个步骤只是为了正确设置两个栏。

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      • 2013-04-11
      • 1970-01-01
      • 2018-05-01
      • 2014-05-21
      • 1970-01-01
      相关资源
      最近更新 更多