2015-04-06 62 views
0

当我第一次加载我的应用程序并登录时,一切都很好。UITabBarController高度在每次加载时都会降低

但是,当我注销时,然后重新登录。我的视图的高度已降低。下面是错误的截图:

enter image description here

我没有带能找到的这个原因。由于我无法指定导致问题的代码的精确部分,因此请求帮助的相当困难。但我会尝试。

有问题的设置是像这样:

我有一个containerViewController,2个childViewControllers,菜单和UITabBarControllerUITabBarController有2 UIViewControllers

为了更好地解释它,下面是一个视觉表示。

_______________________ 

App Start -> 

NavigationController(rootViewController LandingPageVC) 

    LandingPageVC -> push -> SignInVC(this is where I login from) 

    SignInVC -> push -> ContainerViewController(this has my UITabBarController and my menu) 

    ContainerViewController (sets up my menuTabBarController and menu) 

     menuTabBarController (this tabBarController is used to switch out my content from the menu) 

     SidePanelViewController (this is my menu) 

    ContainerViewController -> push(signing out) -> LandingPageVC 

_______________________ 

以下是我在调用成功登录时推送containerViewController的方法。

let mainTableViewController = ContainerViewController() 
mainTableViewController.navigationItem.setHidesBackButton(true, animated: false) 
navigationController!.pushViewController(mainTableViewController, animated: true) 
menuEnabled = true 

这是我用来注销的containerViewController所调用的函数。

func signOut() { 

    // Set up the landing page as the main viewcontroller again. 
    let mainTableViewController = LandingPageVC() 
    mainTableViewController.navigationItem.setHidesBackButton(true, animated: false) 
    mainTableViewController.skipView = false 
    self.navigationController!.pushViewController(mainTableViewController, animated: true) 

    // Disable menu access 
    menuEnabled = false 
} 

通过打印ContainerViewController和menuTabBarController的高度,我发现它是的UITabBarController的高度降低真实,而不是ContainerViewController。

这里是具有与的UITabBarController

import UIKit 
import QuartzCore 

let menuTabBarController = UITabBarController() 

var menuButton = UIBarButtonItem() 

var menuEnabled = false 

class ContainerViewController: UIViewController, CenterViewControllerDelegate, SidePanelViewControllerDelegate, UIGestureRecognizerDelegate { 

    func needsSignOut(sender: SidePanelViewController) { 
     // toggling left panel 
     self.toggleLeftPanel() 
     // signing out 
     self.signOut() 
    } 


    var centerViewController: UITabBarController! 

    var leftViewController: SidePanelViewController? 

    let centerPanelExpandedOffset: CGFloat = 60 

    override func viewDidLoad() { 
    super.viewDidLoad() 

    menuTabBarController.tabBar.hidden = true 

    menuButton = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: self, action: "toggleLeftPanel") 
    if let font = UIFont(name: "FontAwesome", size: 20) { 
     menuButton.setTitleTextAttributes([NSFontAttributeName: font], forState: UIControlState.Normal) 
    } 
    self.navigationItem.leftBarButtonItem = menuButton 

    //let tabBarController = UITabBarController() 
    let suggestionsVC = SuggestionsViewController() 
    let testVC = detaiLSuggestion_VC() 
    let controllers = [suggestionsVC,testVC] 

    menuTabBarController.setViewControllers(controllers, animated: false) 

    centerViewController = menuTabBarController 
    view.addSubview(menuTabBarController.view) 
    addChildViewController(menuTabBarController) 

    //centerNavigationController.didMoveToParentViewController(self) 
    } 

    // MARK: CenterViewController delegate methods 

    func toggleLeftPanel() { 

    let notAlreadyExpanded = (currentState != .LeftPanelExpanded) 

    if notAlreadyExpanded { 
     addLeftPanelViewController() 
    } 

    animateLeftPanel(shouldExpand: notAlreadyExpanded) 

    } 

    func collapseSidePanels() { 
    switch (currentState) { 
    case .LeftPanelExpanded: 
     toggleLeftPanel() 
    default: 
     break 
    } 
    } 

    func addLeftPanelViewController() { 
    if (leftViewController == nil) { 
     leftViewController = SidePanelViewController() 
     leftViewController!.delegate = self 

     addChildSidePanelController(leftViewController!) 
    } 
    } 

    func addChildSidePanelController(sidePanelController: SidePanelViewController) { 

    view.insertSubview(sidePanelController.view, atIndex: 0) 

    addChildViewController(sidePanelController) 
    sidePanelController.didMoveToParentViewController(self) 
    } 

    func animateLeftPanel(#shouldExpand: Bool) { 
    if (shouldExpand) { 
     currentState = .LeftPanelExpanded 

     animateCenterPanelXPosition(targetPosition: CGRectGetWidth(centerViewController.view.frame) - centerPanelExpandedOffset) 
    } else { 
     animateCenterPanelXPosition(targetPosition: 0) { finished in 
     self.currentState = .BothCollapsed 

     self.leftViewController!.view.removeFromSuperview() 
     self.leftViewController = nil; 
     } 
    } 
    } 


    func animateCenterPanelXPosition(#targetPosition: CGFloat, completion: ((Bool) -> Void)! = nil) { 
    UIView.animateWithDuration(0.5, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: .CurveEaseInOut, animations: { 
     self.centerViewController.view.frame.origin.x = targetPosition 
     }, completion: completion) 
    } 

任何帮助推断这哪里是来自做的代码或我怎么能去修复它,将不胜感激!再次,我为代码的愚蠢道歉。如果我能够排除其中的一部分,我会进一步更新它。

+0

这真的很难找出你想要做什么。为什么你有3个不同的标签栏控制器,menuTabBarController,menuTabBarController和centerViewController?如果你试图按照我在另一个问题的答案中提到的设置进行操作,应该只有一个标签栏控制器。 – rdelmar

+0

我心中想的是像我的测试应用程序的更新版本,http://jmp.sh/d07hcHp这仍然使用故事板来做设置,但你应该让我知道,如果这是你的功能正在寻找。 – rdelmar

+0

@rdelmar再次感谢您的回复。我只有(或者说使用)一个'UITabBarController' menuTabBarController。我正在为'centerTabBarController'设置'CenterViewController = menuTabBarController',这是我忘了在我的贴上删除的测试用例。无论如何,我看着你的测试应用程序。但它似乎没有另一个viewController。我的菜单系统现在工作得很好。但是,当我推开我的'containerViewController'并推回来。 menuTabBarController再次被加载,并由于某种原因加载了较小的帧高。这就是我目前遇到的问题 –

回答

0

rdelmar找到了我的聊天解决方案。

的问题得到了解决通过指定menuTabBarController.view.frame像这样:

menuTabBarController.view.frame = self.view.frame 
相关问题