2015-04-06 4 views
0

Когда я впервые загружаю приложение и регистрируюсь. Все в порядке.Высота UITabBarController уменьшается каждый раз, когда она загружается

Однако, когда я выхожу из системы, войдите в систему. Высота моего представления была уменьшена. Вот скриншот ошибки:

enter image description here

Я havn't удалось найти причину этого. Сделать этот довольно сложный вопрос, чтобы обратиться за помощью, поскольку я не могу указать точный раздел кода, вызывающий проблему. Но я попытаюсь.

Проблемная установка следующим образом:

У меня есть 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 

_______________________ 

Вот как я нажимаю контейнерViewController, когда вызывается успешный логин.

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? Если вы пытаетесь следовать чему-то вроде настройки, о которой я говорил в ответе на другой ваш вопрос, должен быть только 1 контроллер панели вкладок. – rdelmar

+0

То, что я имел в виду, было чем-то вроде этой обновленной версии моего тестового приложения, http://jmp.sh/d07hcHp. Это все еще использует раскадровку, чтобы выполнить настройку, но вы должны сообщить мне, если это функциональность, которую вы «Ищем. – rdelmar

+0

@rdelmar Спасибо за ответы еще раз. Я только (или, скорее, использую) один 'UITabBarController' menuTabBarController. Я устанавливаю 'CenterViewController = menuTabBarController' как для' centerTabBarController', который был тестовым, который я забыл удалить в моей пасте. Во всяком случае, я посмотрел ваше тестовое приложение. Но у него, похоже, нет другого viewController. Моя система меню работает отлично. Однако, когда я отжимаю свой «containerViewController» и отжимаю его. MenuTabBarController снова загружается и по какой-то причине загружается с меньшей высотой кадра. Это проблема, с которой я сейчас сталкиваюсь –

ответ

0

rdelmar нашел решение для меня в чате.

Проблема была зафиксирована путем указания menuTabBarController.view.frame как так:

menuTabBarController.view.frame = self.view.frame 
Смежные вопросы