UITabBarController 每次加载时高度都会降低
Posted
技术标签:
【中文标题】UITabBarController 每次加载时高度都会降低【英文标题】:UITabBarController height decreases everytime it's loaded 【发布时间】:2015-04-06 23:40:27 【问题描述】:当我第一次加载我的应用程序并登录时。一切都很好。
但是,当我注销时,请重新登录。我的视图高度已降低。这是错误的屏幕截图:
我还没有找到原因。由于我无法指定导致问题的确切代码部分,因此这是一个很难寻求帮助的问题。不过我会试试的。
有问题的设置是这样的:
我有一个 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?如果您尝试遵循我在回答您的另一个问题时谈到的设置,则应该只有 1 个标签栏控制器。 我想到的是我的测试应用程序的更新版本,jmp.sh/d07hcHp 这仍在使用情节提要进行设置,但如果这是功能,您应该告诉我您正在寻找。 @rdelmar 再次感谢您的回复。我只有(或者更确切地说是使用)一个UITabBarController
menuTabBarController。我将CenterViewController = menuTabBarController
设置为centerTabBarController
,这是我忘记在粘贴中删除的测试。无论如何,我查看了您的测试应用程序。但它似乎没有另一个viewController。我的菜单系统现在工作得很好。但是,当我推开我的containerViewController
并将其推回时。 menuTabBarController 再次加载,并且由于某种原因加载了较小的框架高度。这就是我目前遇到的问题
“它似乎没有另一个视图控制器”是什么意思?你的意思是相当于你的登录控制器吗?当您注销时,您推送到 LandingPageVC,这是一个新的控制器,与登录控制器不同吗?
@rdelmar 是的。我的应用程序以UINavigationController
开头,根视图控制器是loginViewController
。从那里它推到ContainerViewController
(它是2 childViewControllers
)。然后我从ContainerViewController
推回到LandingPageViewController
。但是,当我再次登录时。我的UITabBarController
的高度不是我屏幕的全高。 (每次我注销并重新登录时它都会变小。) - 您链接的测试应用程序在 ContainerViewController 中启动。它不会推入和推出ContainerViewController
。 (这是我的问题)。
【参考方案1】:
rdelmar 在聊天中为我找到了解决方案。
问题已通过指定menuTabBarController.view.frame
得到解决,如下所示:
menuTabBarController.view.frame = self.view.frame
【讨论】:
以上是关于UITabBarController 每次加载时高度都会降低的主要内容,如果未能解决你的问题,请参考以下文章
加载后是不是可以更改 UITabBarController 文本颜色?
如何在用户选择时在 uitabbarcontroller 内的 uinavigationcontroller 中每次都初始化 viewcontroller
如何在 UITabBarController 中加载所有视图?
需要从 appdelegate 加载 UIViewController 并在 Storyboard App 中加载时隐藏 UITabBarController