Search code examples
iosobjective-cswiftuitabbar

Positioning UITabBar at the top


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.


Solution

  • 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