每次加载UITabBarController高度都会降低

时间:2015-04-06 23:40:27

标签: ios swift uiviewcontroller 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)
  }

任何有助于推断其来源或如何修复它的帮助将不胜感激!我再次为愚蠢的代码道歉。如果我能够排除部分内容,我会进一步更新。

1 个答案:

答案 0 :(得分:0)

rdelmar在聊天中为我找到了解决方案。

通过指定menuTabBarController.view.frame来解决问题:

menuTabBarController.view.frame = self.view.frame