我试图设想一种方法,我可以在标签栏顶部浮动视图。这基本上可以涵盖它。我不知道该如何解决这个问题。如果标签栏本身是另一个控制器的子视图,那么这看起来很容易,但据我所知,如果不“滥用”视图控制器方法(即addSubview:tabbar.view或类似的东西),你就无法真正做到这一点。
基本上,iphone屏幕上的空间有限,标签栏是导航,但有时我想使用该空间来简要显示信息。如果标签栏是我的根控制器,我认为这是不可能的。
我已经阅读了其他帖子,建议使用setHidesBottomBarWhenPushed
,但我没有使用导航控制器,而且我还想动态控制栏被隐藏或被其他视图覆盖的时间,所以我可以在需要时将新视图移开,并再次显示标签栏。
任何其他建议指出我正确的方向将不胜感激。
答案 0 :(得分:5)
您可以使用根窗口。如果您只是从[[UIApplication sharedApplication] keyWindow]
获取主窗口,则可以直接向其添加视图。这将允许您再次在屏幕上的任何地方浮动任何东西。你仍然会有一些小问题来处理旋转,但是如果你没有进行自动旋转,那么它就像不担心它一样简单。
另一种选择是实际创建一个新的UIWindow并将其中的内容放在任何地方。这就是UIAlertView
实际工作的方式。这样,它根本不会干扰您的视图层次结构。此方法有一个问题,因为只有一个窗口会将事件(包括触摸)分派给其子视图。所以使用它基本上允许用户仍然触摸下面的栏。第一种选择可能会更好,但我只是把它扔到那里以防任何人发现它有用。
答案 1 :(得分:1)
我建议如下。
UIView
|
--UIView (this will hold the tab bar controller)
|
-- Tabbar controller
|
--Full Screen View
所以基本上标签栏包含在UIView中。这被添加到主UIView中。如果要显示全屏,可以将该视图添加到主UI视图中。因此,不需要隐藏/取消隐藏标签栏。
答案 2 :(得分:0)
类似的东西:
if let indeedTabBarController = self.tabBarController {
let buttonHeight: CGFloat = 49 // height of tab bar
let buttonWidth = UIScreen.main.bounds.width / 3 // in case if you have 3 tabs
let frame = CGRect(x: 0, y: UIScreen.main.bounds.height - buttonHeight, width: buttonWidth, height: buttonHeight)
let button = UIButton(frame: frame)
button.addTarget(self, action: #selector(self.someAction), for: .touchUpInside)
indeedTabBarController.view.addSubview(button)
}