gpt4 book ai didi

ios - Swift 以编程方式删除标签栏

转载 作者:行者123 更新时间:2023-11-28 07:13:24 24 4
gpt4 key购买 nike

我的 iOS 8 应用程序的主导航是一个包含 3 个选项卡的选项卡栏。我还有一个登录屏幕,它是一个 UIViewController,底部不应有选项卡。如果我检测到用户未登录或已选择注销,我只会从正常流程以编程方式访问登录屏幕。当我使用以下代码显示登录屏幕时,我不确定如何从屏幕上删除标签:

let loginView = self.storyboard?.instantiateViewControllerWithIdentifer("Login") as UIViewController
self.presentViewController(loginView, animate: true, completion: nil)

我尝试将 tabBar.hidden 属性设置为 true 但没有结果。我还尝试修改 Storyboard 以将“底部栏”设置为“无”并选中“在推送时隐藏底部栏”。

最佳答案

也许登录屏幕的行为与主屏幕不同。因此,您可能想为登录屏幕创建另一个 ViewController。

I have tried setting the tabBar.hidden property to true with no result.

标签栏加载完成了吗?在登录 View 的 viewDidLoad 之后调用 hidden=YES

编辑

调用self.presentViewController(loginView, ...) 后,UITabBarController 的 View 将从UIWindow 中移除,而loginView 的 View 将插入到UIWindow 的 subview 中。所以标签栏现在是不可见的。

您可以使用 XCode6 的 View 调试功能来了解 View 层次结构。您也可以使用 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.
}
}

关于ios - Swift 以编程方式删除标签栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27476060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com