Programmatically UIToolbar on the bottom

19,702

Solution 1

You're setting rect2's y position to the value of [toolbar frame].origin.y, which at that point in the code is either nil, or pointing to some other instance of a toolbar, because you then immediately afterwards alloc and init a new toolbar.

Even if the toolbar was valid when you set it's frame, you can't use it's current y value as the new y value, because it will be 0.

You should position it relative to the bottom of the screen, minus the height of the toolbar. Try this instead:

CGRect frame = CGRectMake(0, [[UIScreen mainScreen] bounds].size.height - 44, [[UIScreen mainScreen] bounds].size.width, 44);

Solution 2

This creates a bottom aligned toolbar

CGRect frame, remain;
CGRectDivide(self.view.bounds, &frame, &remain, 44, CGRectMaxYEdge);
UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:frame];
[toolbar setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin];
[self.view addSubview:toolbar];
Share:
19,702
iOS.Lover
Author by

iOS.Lover

Updated on June 20, 2022

Comments

  • iOS.Lover
    iOS.Lover almost 2 years

    I am creating a UIToolbar programmatically but the issue is the position of this tool bar is up (navigation bar position). how can I put it automatically on the bottom?

    Here is my code:

        CGRect rect2 = CGRectMake(0, toolBar.frame.origin.y , self.view.frame.size.width , 0);
        toolBar = [[UIToolbar alloc]initWithFrame:rect2];
        toolBar.barStyle = UIBarStyleBlackTranslucent;
        [toolBar sizeToFit];
        [self.view addSubview:toolBar];
        [toolBar release];
    

    because my application is universal and my view controller class does not have any nib file I need to define it for both iPad and iPhone, and I don't want use UIUserInterfaceIdiomPad.

  • iOS.Lover
    iOS.Lover over 12 years
    no I set my rect position I did not write my whole code sorry !
  • Ömer Faruk Almalı
    Ömer Faruk Almalı over 10 years
    Good answer but when using this with table view, first cell appears below navigation bar and last cell appears below toolbar.
  • galactikuh
    galactikuh about 8 years
    Nice. I've been using view.bounds which puts the toolbar about 20 pixels above the bottom. This does the trick.
  • TomLisankie
    TomLisankie almost 8 years
    @Jasarien Hi, I have a similar situation but in Swift. However, your solution is not working even though it's a direct translation. The toolbar appears for other height values, but not this one. let toolbar = UIToolbar(frame: CGRectMake(0, UIScreen.mainScreen().bounds.size.height - 60, UIScreen.mainScreen().bounds.size.width, 60));