iOS使用rootViewController跳过登录视图导致嵌套TableView中出现黑条错误

时间:2015-05-27 19:45:51

标签: ios uitableview xcode6.3 rootview

一旦用户成功登录我的应用并选择存储他们的凭据,我就会跳过我的初始视图控制器(登录页面)。

我的新根视图控制器是一个TabBarController,因为我的应用程序的导航使用TabBar。

但是,在应用程序中,我有TableViews,它们之前是各自的NavigationController。在这些TableView中,我在TabBar上面有一个黑条。如果我导航到下一个TableView,那么黑条会加倍,如果我进入下面的TableView,那么黑条现在是第一个的3倍。

以下是一些截图;由于敏感数据我添加了灰色条来掩盖实时数据。

First Bar

Double Sized Bar after second navigation to TableView

Third navigation to TableView, now 3 times initial size

我在我的didFinishLaunchingWithOptions方法的AppDelegate(使用Swift)中有这个:

    if let api_key = NSUserDefaults.standardUserDefaults().stringForKey("key") {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let tabBarController = storyboard.instantiateViewControllerWithIdentifier("TabBarC") as! MyTabBarController
        if let window = self.window {
            window.rootViewController = tabBarController
        }
    }

我应该实例化内部导航控制器吗?如果是这样,我该如何做到这一点,因为我的TabBar已经为4个选项卡提供了4个NavigationControllers,我将在哪里插入在应用程序深处找到的其他NavControllers?

更新 我能够通过

解决黑条虫
  1. 关闭项目
  2. 压缩Main.storyboard文件以保持备份
  3. 从项目文件夹中删除了Main.storyboard文件
  4. 从备份
  5. 添加回以前版本的Main.storyboard

    我还找到了另一种方式来跳过"跳过"我的登录屏幕,无需在我的应用程序委托中实例化视图控制器。

    伪代码 在storyboard中,为登录和tabBar视图控制器之间的segue添加一个ID。

    In the login VC
        view did load
            hide the textboxes
    
        if key exists {
            performSegue(id: <segwayid>
        } else {
            show the login textboxes
    

2 个答案:

答案 0 :(得分:0)

O.K,在您的项目设置中。不要设置主故事板。

ProjectSeetings

并将您的代码更改为以下内容:

self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
var rootController = nil

if let api_key = NSUserDefaults.standardUserDefaults().stringForKey("key") {
    rootController = storyboard.instantiateViewControllerWithIdentifier("TabBarC") as! MyTabBarController
        } 
else {
    rootController = storyboard.instantiateViewControllerWithIdentifier("LoginController") as! LoginController // Change this line according to your project.
}

self.window!.rootViewController = rootController
self.window!.makeKeyAndVisible()

答案 1 :(得分:0)

我怀疑您将每个money更改为不在view's frame下的代码。

您应该查看UITabBar中的loadView(如果是),viewDidLoadviewWillAppearviewDidAppear方法。