如何在 iOS 11 和 iPhone X 上实现隐藏 UITabBar 以显示 UIToolbar

Posted

技术标签:

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

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

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

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

【问题讨论】:

你试过这些链接了吗 1.***.com/questions/20935228/… 2.***.com/questions/2257178/… 3.***.com/questions/5543582/… 4.***.com/questions/27008737/… @Gagan_ios 他们没有解决 UITabBarController 如何更改 iOS 11 上的安全区域。 【参考方案1】:

如果我根据您对照片应用程序的描述做出正确的假设,我想您可能会对从 Photos App TabBar 到 Photos 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;
    
 

【讨论】:

以上是关于如何在 iOS 11 和 iPhone X 上实现隐藏 UITabBar 以显示 UIToolbar的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPhone 上实现音频流 <50 毫秒的延迟

在 iphone 上实现增量搜索

如何在我的解析服务器上实现 Android 和 IOS 应用程序的预定推送通知?

有人使用 XMPP 在 iOS 上实现推送通知吗?

有没有办法在 iPhone 的离线 openstreetmaps sqlite 地图瓦片数据库上实现离线地理编码?

纵览iPhone X所有新特性:从3D人脸识别到A11Bionic神经引擎