当我第一次加载我的应用程序并登录时,一切都很好。UITabBarController高度在每次加载时都会降低
但是,当我注销时,然后重新登录。我的视图的高度已降低。下面是错误的截图:
我没有带能找到的这个原因。由于我无法指定导致问题的代码的精确部分,因此请求帮助的相当困难。但我会尝试。
有问题的设置是像这样:
我有一个containerViewController
,2个childViewControllers,菜单和UITabBarController
。 UITabBarController
有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)
}
任何帮助推断这哪里是来自做的代码或我怎么能去修复它,将不胜感激!再次,我为代码的愚蠢道歉。如果我能够排除其中的一部分,我会进一步更新它。
这真的很难找出你想要做什么。为什么你有3个不同的标签栏控制器,menuTabBarController,menuTabBarController和centerViewController?如果你试图按照我在另一个问题的答案中提到的设置进行操作,应该只有一个标签栏控制器。 – rdelmar
我心中想的是像我的测试应用程序的更新版本,http://jmp.sh/d07hcHp这仍然使用故事板来做设置,但你应该让我知道,如果这是你的功能正在寻找。 – rdelmar
@rdelmar再次感谢您的回复。我只有(或者说使用)一个'UITabBarController' menuTabBarController。我正在为'centerTabBarController'设置'CenterViewController = menuTabBarController',这是我忘了在我的贴上删除的测试用例。无论如何,我看着你的测试应用程序。但它似乎没有另一个viewController。我的菜单系统现在工作得很好。但是,当我推开我的'containerViewController'并推回来。 menuTabBarController再次被加载,并由于某种原因加载了较小的帧高。这就是我目前遇到的问题 –