我的iOS 8应用程序的主要导航是带有3个标签的标签栏。我也有一个登录屏幕,它是一个UIViewController,底部不应有选项卡。仅当我检测到用户未登录或已选择注销时,才从常规流程中以编程方式访问登录屏幕。当显示带有以下代码的登录屏幕时,我不确定如何从屏幕上删除选项卡:
let loginView = self.storyboard?.instantiateViewControllerWithIdentifer("Login") as UIViewController
self.presentViewController(loginView, animate: true, completion: nil)
我尝试将tabBar.hidden
属性设置为true
无结果。我还尝试修改情节提要以将“底部栏”设置为“无”,并选中了“在推送时隐藏底部栏”。
登录屏幕的行为可能与主屏幕不同。因此,您可能想为“登录”屏幕创建另一个ViewController。
我尝试将tabBar.hidden属性设置为true,但没有结果。
加载选项卡栏是否完成?hidden=YES
在viewDidLoad
您的loginView之后调用。
编辑
调用后self.presentViewController(loginView, ...)
,将从UIWindow中删除UITabBarController的视图,并将loginView的视图插入到UIWindow的子视图中。因此选项卡栏现在不可见。
您可以使用XCode6的“视图调试”功能来了解视图层次结构。您也可以使用UIViewController的recursiveDescription()
方法。
/* UIViewExtension.h */
@interface UIView(MyExtension)
- (NSString*)recursiveDescription; //This is hidden API so need the declaration.
@end
/* YourViewController.swift */
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
println(self.tabBarController?.view.superview?.recursiveDescription())
// Here, the view of tabBarController is subview of UIWindow.
}
@IBAction func testButtonPressed(sender: UIButton) {
self.presentViewController(viewController, animated: true) { () -> Void in
println(self.tabBarController?.view.superview?.recursiveDescription())
println(loginView.view.superview?.superview?.recursiveDescription())
//Now, TabBarController's view is not subView of UIWindow.
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句