1

I'm learning and trying a lot at the moment and so I tried to do a custom tab bar instead of using the UITabBar. For that I used this tutorial https://guides.codepath.com/ios/Creating-a-Custom-Tab-Bar and everything is working well when my child view controllers are together with the parent vc in the same storyboard (see screenshot: same storyboard)

But I want to have just the main view controller in the main storyboard and the children in their own storyboards because there will be a lot more view controllers later, so everything is more organized.

The problem now is: it seams like the constraints are destroyed or something else (?). The interface is not built correctly anymore like you can see in this screenshot: different storyboards

I would be glad if someone can help me :)

    @IBOutlet weak var contentView: UIView!
    @IBOutlet weak var fancyTabView: UIView!
    @IBOutlet var fancyTabButtons: [UIButton]!

    var infoViewController: UIViewController!
    var challengesViewController: UIViewController!
    var meViewController: UIViewController!
    var viewControllers: [UIViewController]!

    var selectedIndex = 0

    override func viewDidLoad() {
        super.viewDidLoad()

        infoViewController = UIStoryboard(name: "Info", bundle: nil).instantiateViewController(withIdentifier: "InfoViewController")
        challengesViewController = UIStoryboard(name: "Challenges", bundle: nil).instantiateViewController(withIdentifier: "ChallengesViewController")
        meViewController = UIStoryboard(name: "Me", bundle: nil).instantiateViewController(withIdentifier: "MeViewController")
        viewControllers = [infoViewController, challengesViewController, meViewController]

        // default selected tab button
        fancyTabButtons[selectedIndex].isSelected = true
        didPressTab(fancyTabButtons[selectedIndex])

        configureUI()
    }

    private func configureUI() {
        fancyTabView.layer.cornerRadius = 24
        fancyTabView.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
        fancyTabView.layer.shadowColor = UIColor.greyscaleShadow.cgColor
        fancyTabView.layer.shadowOffset = CGSize(width: 0, height: -10)
        fancyTabView.layer.shadowRadius = 40
        fancyTabView.layer.shadowOpacity = 1
    }

    @IBAction func didPressTab(_ sender: UIButton) {
        let previousIndex = selectedIndex
        selectedIndex = sender.tag
        fancyTabButtons[previousIndex].isSelected = false

        let previousVC = viewControllers[previousIndex]
        previousVC.willMove(toParent: nil)
        previousVC.view.removeFromSuperview()
        previousVC.removeFromParent()

        sender.isSelected = true
        let vc = viewControllers[selectedIndex]
        addChild(vc)
        vc.view.frame = contentView.bounds
        contentView.addSubview(vc.view)
        vc.didMove(toParent: self)
    }

Everything is working well when the view controllers are together in the same storyboard (with this code)

infoViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "InfoViewController")
challengesViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ChallengesViewController")
meViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MeViewController")

but when there are in different storyboards with this code, it's not working correctly

infoViewController = UIStoryboard(name: "Info", bundle: nil).instantiateViewController(withIdentifier: "InfoViewController")
challengesViewController = UIStoryboard(name: "Challenges", bundle: nil).instantiateViewController(withIdentifier: "ChallengesViewController")
meViewController = UIStoryboard(name: "Me", bundle: nil).instantiateViewController(withIdentifier: "MeViewController")
TGDev
  • 33
  • 4
  • I got the solution: 1. Make the child view controller's size to freeform and set the height to the height of parent view controller's container view. 2. Set the constraints of child vc to superview and not to safe area. Done :) – TGDev Aug 31 '19 at 09:58

0 Answers0