如何在 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的主要内容,如果未能解决你的问题,请参考以下文章
如何在我的解析服务器上实现 Android 和 IOS 应用程序的预定推送通知?