Positioning UITabBar at the top

前端 未结 9 1659
小鲜肉
小鲜肉 2020-11-28 10:30

I\'m a beginner in iOS development. My question is: is it possible to position UITabBar at the top and how? I can\'t position my UITabBar at the top of the view.

相关标签:
9条回答
  • 2020-11-28 10:55

    Here is a working swift 3 example of aviatorken89's code.

    1. First create a new file.
    2. Select source cocoa touch class.
    3. Designate subclass of: UITabBarController
    4. Name the class "CustomTabBarController" or whatever you'd like.
    5. Add the following code to the class.

      override func viewWillLayoutSubviews() {
          super.viewWillLayoutSubviews()
          var tabFrame:CGRect = self.tabBar.frame
          tabFrame.origin.y = self.view.frame.origin.y
          self.tabBar.frame = tabFrame
      }
      
    6. If you are using storyboard make sure to change the tab bar class to your custom class via the "Identity inspector".

    0 讨论(0)
  • 2020-11-28 10:57

    After Update to xCode 11.5. Added this code in my controller. work ios 13

    override func viewWillLayoutSubviews() {
            renderTabPosition()
            super.viewWillLayoutSubviews()
        }
    private func renderTabPosition() {
            tabBar.frame = CGRect(x: 0, y: 0, width: tabBar.frame.size.width, height: tabBar.frame.size.height + 5)        
    }
    
    0 讨论(0)
  • 2020-11-28 11:01

    subviews of TabbarController hide back of Tabbar . so for fix use this code :

    class CustomTabBarController: UITabBarController ,UITabBarControllerDelegate{
    
        override func viewDidLayoutSubviews() {
            tabBar.frame = CGRect(x: 0, y: 0, width: tabBar.frame.size.width, height: tabBar.frame.size.height)
            super.viewDidLayoutSubviews()
            delegate = self
            selectedViewController?.view.frame.origin = CGPoint(x: 0, y: tabBar.frame.size.height)
        }
    
        func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
              selectedViewController?.view.frame.origin = CGPoint(x: 0, y: tabBar.frame.size.height)
        }
    
    }
    
    0 讨论(0)
  • 2020-11-28 11:08

    Swift3: I achieve this by creating a custom class for UITabBarController:

    class CustomTabBarController: UITabBarController {
    
       @IBOutlet weak var financialTabBar: UITabBar!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // I've added this line to viewDidLoad
            UIApplication.shared.statusBarFrame.size.height
            financialTabBar.frame = CGRect(x: 0, y:  financialTabBar.frame.size.height, width: financialTabBar.frame.size.width, height: financialTabBar.frame.size.height)
        }
    

    Don't forget to set your Custom Class to TabBarController

    The result would be like this:

    0 讨论(0)
  • 2020-11-28 11:08

    You can create a custom tab bar by making it yourself, but apple highly discourages mimicking a system control for a function it was not originally intended to do.

    Once again, I discourage you to do so, because it violates the consistency of your app and system apps. But since I'm at it, here we go:

    For a custom tab bar, you need to create a view that holds multiple buttons. You also need a container view below the UITabBar (because you want the UITabBar to be at the top). When a button is pressed, you change the UIViewController inside the container.
    Its quite simple, but of course, its strongly not recommended.

    0 讨论(0)
  • 2020-11-28 11:11

    Swift 5

    Add this code to your UITabBarViewController;

      override func viewDidLayoutSubviews() {
        let height = navigationController?.navigationBar.frame.maxY
        tabBar.frame = CGRect(x: 0, y: height ?? 0, width: tabBar.frame.size.width, height: tabBar.frame.size.height)
        super.viewDidLayoutSubviews()
      }
    

    It works for iOS > 13 and iOS < 13

    0 讨论(0)
提交回复
热议问题