【问题标题】:How to implement hiding the UITabBar to display an UIToolbar on iOS 11 and iPhone X如何在 iOS 11 和 iPhone X 上实现隐藏 UITabBar 以显示 UIToolbar
【发布时间】:2017-09-28 17:06:16
【问题描述】:

我正在尝试做一个类似于照片应用程序的 UI,当您进入隐藏标签栏以显示工具栏的选择模式时。

我的视图控制器位于 UINavigationController 中,导航控制器位于 UITabBarController 中。

我之前有其他策略,但我很难在 iPhone X 及其底部安全边距上实现这一点。

【问题讨论】:

标签: ios iphone uitabbarcontroller ios11 iphone-x


【解决方案1】:

如果我根据您对照片应用程序的描述做出正确的假设,我想您可能会对从 Photos App TabBarPhotos App Toolbar 时应用程序在后台执行的操作感到困惑。

这是两个不同的 ViewController,第二个只显示工具栏并在 init 中设置hidesBottomBarWhenPushed = true。您可以通过在第二个 ViewController 中设置 setToolbarItems(toolbarItems: [UIBarButtonItem]?, animated: Bool) 来使用 NavigationController 提供的工具栏。这会正确调整视图中工具栏的大小,以适应 iPhoneX 上的底部控件。

如果您必须在同一个 ViewController 中管理工具栏和 TabBar 可见性,根据我的测试,您需要在 UIView 容器中手动添加/管理工具栏,以在所有设备上获得适当的大小。所以视图层次结构是 ViewController.view -> toolbarContainer View -> Toolbar。

【讨论】:

  • 我的意思是这种模式:imgur.com/a/DA5Ip。我最终通过 Apple 的代码级支持解决了这个问题,它不仅仅是添加为子视图。我稍后会在这里发布。
  • @MarcoPompei 你找到解决方案了吗?
【解决方案2】:

对于 iPhone X,标签栏高度与 iPhone 8 不同,需要跟踪

static CGFloat tabBarMaxHeight = 0;

- (void)setToolbarHidden:(BOOL)hidden {
    [self.navigationController setToolbarHidden:hidden animated:NO];
    CGRect frame = self.tabBarController.tabBar.frame;
    tabBarMaxHeight = MAX(tabBarMaxHeight, CGRectGetHeight(frame));
    frame.size.height = hidden ? tabBarMaxHeight : 0;
    self.tabBarController.tabBar.frame = frame;
    self.tabBarController.tabBar.hidden = !hidden;

    //! reset tab bar item title to prevent text style compacted
    for (UITabBarItem *obj in self.tabBarController.tabBar.items) {
         NSString *title = obj.title;
         obj.title = @"";
         obj.title = title;
    }
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    相关资源
    最近更新 更多