Search code examples
iosswiftuitabbarcontrollertabbar

Tab Bar Height and button size - Fixed?


i have a custom tab bar controller, that i want to add 2 buttons to. 1 enlarged centre button and 1 button on the left to create a side out burger menu that is launched from the tab bar instead instead of the top navigation bar.

i was going to try and get the tab bar height programatically so i can set the button heights ect from that. so i read up and tried the following code which does not work.

self.tabBarController?.tabBar.frame.size.height

i read somewhere else that the tabbar is always a fixed 49 pixels regardless of device?

if that is the case is it safe to use something like:

menuButtonFrame.origin.y = self.view.bounds.height - (CGFloat(49) - menuButtonFrame.size.height) / 2

to set the position of my button? (the black box) its not positions right just yet

also wondering what the default value for the tabbar button is?

enter image description here


Solution

  • Create a UIView Like this and set the height of the center item as your wish.

    enter image description here

    And then in TabbarView Controller. add this view to the tabbar View Like this.

    UITabBar.appearance().shadowImage = UIImage()
    
            customNavBar = NSBundle.mainBundle().loadNibNamed("CustomTabBarView", owner: self, options: nil)[0] as! UIView
    
            bdNavBar.translatesAutoresizingMaskIntoConstraints = false
    
            self.tabBar.addSubview(customNavBar)
    

    And then add Constraints to the custom Tabbar.

    self.view.addConstraint(NSLayoutConstraint(item: customNavBar, attribute: .Left, relatedBy: .Equal, toItem: self.view, attribute: .Left, multiplier: 1.0, constant:  0))
    self.view.addConstraint(NSLayoutConstraint(item: customNavBar, attribute: .Right, relatedBy: .Equal, toItem: self.view, attribute: .Right, multiplier: 1.0, constant:  0))
    self.view.addConstraint(NSLayoutConstraint(item: customNavBar, attribute: .Bottom, relatedBy: .Equal, toItem: self.view, attribute: .Bottom, multiplier: 1.0, constant:  0))
    bdNavBar.addConstraint(NSLayoutConstraint(item: customNavBar, attribute: NSLayoutAttribute.Height, relatedBy: .Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1.0, constant:  50))        
    self.tabBar.bringSubviewToFront(customNavBar)