0

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

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

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

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

第一酒吧

第二次导航到 TableView 后的双倍大小栏

第三次导航到 TableView,现在是初始大小的 3 倍

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

    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. 从备份中添加回以前版本的 Main.storyboard

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

伪代码 在故事板中添加一个 ID 到登录和 tabBar 视图控制器之间的 segue。

In the login VC
    view did load
        hide the textboxes

    if key exists {
        performSegue(id: <segwayid>
    } else {
        show the login textboxes
4

2 回答 2

0

好的,在您的项目设置中。不要设置主情节提要。

项目见闻

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

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()
于 2015-05-28T00:35:11.253 回答
0

我怀疑您将每个都更改view's frame为不使用UITabBarby 代码。

你应该检查你的loadView(如果是的话)viewDidLoadviewWillAppearviewDidAppear你的方法UIViewController

于 2015-05-28T10:52:24.063 回答