Positioning UITabBar at the top Positioning UITabBar at the top ios ios

Positioning UITabBar at the top


Is it possible? Sure, but it violates the human interface guidelines.

Screenshots:

Portrait Landscape Storyboard

Code:

TabController.h:

#import <UIKit/UIKit.h>@interface TabController : UITabBarController <UITabBarControllerDelegate>@end

TabController.m:

#import "TabController.h"@interface TabController ()@end@implementation TabController- (void)viewDidLoad{    [super viewDidLoad];    self.delegate = self;}- (void)viewWillLayoutSubviews{    [super viewWillLayoutSubviews];    [self.tabBar invalidateIntrinsicContentSize];    CGFloat tabSize = 44.0;    UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;    if (UIInterfaceOrientationIsLandscape(orientation))    {        tabSize = 32.0;    }    CGRect tabFrame = self.tabBar.frame;    tabFrame.size.height = tabSize;    tabFrame.origin.y = self.view.frame.origin.y;    self.tabBar.frame = tabFrame;    // Set the translucent property to NO then back to YES to    // force the UITabBar to reblur, otherwise part of the    // new frame will be completely transparent if we rotate    // from a landscape orientation to a portrait orientation.    self.tabBar.translucent = NO;    self.tabBar.translucent = YES;}- (void)didReceiveMemoryWarning{    [super didReceiveMemoryWarning];}@end


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 TabBarControllerenter image description here

The result would be like this:

enter image description here


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".