How to add a view behind other view in iOS

44,362

Solution 1

try sendSubviewToBack

[self.view sendSubviewToBack:leftPanelView];

Solution 2

Besides addSubview, there are other methods you can rely on to add your view:

– insertSubview:aboveSubview:
– insertSubview:belowSubview:
– insertSubview:atIndex:

You can control the index (actually z-index, or layer order) of the view using these methods.

Solution 3

Swift 5

Insert a view below another view in the view hierarchy:

view.insertSubview(subview1, belowSubview: subview2)

Insert a view above another view in the view hierarchy:

view.insertSubview(subview1, aboveSubview: subview2)

Insert a subview at the specified index:

view.insertSubview(subview, at: index)

Move the specified subview so that it appears behind its siblings:

subview1.sendSubviewToBack(subview2)

Move the specified subview so that it appears on top of its siblings:

subview1.bringSubviewToFront(subview2)

Exchange the subviews at the specified indices:

view.exchangeSubview(at: index1, withSubviewAt: index2)

Solution 4

Oh, I found a solution myself. I added after this:

[UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.5];
    [self.view addSubview:leftPanelView];

this line:

[self.view sendSubviewToBack:leftPanelView];

Solution 5

In Swift 5

self.view.sendSubviewToBack(leftPanelView)
Share:
44,362
Denis Kutlubaev
Author by

Denis Kutlubaev

iOS developer

Updated on July 09, 2022

Comments

  • Denis Kutlubaev
    Denis Kutlubaev almost 2 years

    I want to add a view under my tab bar analog in iOS and then show it with animation coming from behind it. But when I use my code, the view that must come from behind my tab bar overlaps my tab bar for a while.

    tab bar and a view that shows when tab bar button pressed

    This is my code:

    - (void)handlePressedButton {
    if (pressedButton.selected) {
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.5];
        CGAffineTransform transform1 = CGAffineTransformMakeTranslation(-196.0, 0.0);
        CGAffineTransform transform2 = CGAffineTransformMakeTranslation(0.0, 0.0);
        [leftPanelView setTransform:transform1];
        [movedView setTransform:transform2];
        [UIView commitAnimations];
        pressedButton.selected = NO;
    }
    else {
        pressedButton.selected = YES;
        if (leftPanelView) {
            [leftPanelView removeFromSuperview];
            leftPanelView = nil;
        }
        CGRect viewFrame = CGRectMake(-196, 0, 236, 748);
        leftPanelView = [[UIView alloc] initWithFrame:viewFrame];
        leftPanelView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"left-nav-content.png"]];
    
        // Code to populate leftPanelView according to what button is pressed.
        [self populateLeftPanelView];
    
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.5];
        [self.view addSubview:leftPanelView];
        CGAffineTransform transform1 = CGAffineTransformMakeTranslation(236.0, 0.0);
        CGAffineTransform transform2 = CGAffineTransformMakeTranslation(112.0, 0.0);
        [leftPanelView setTransform:transform1];
        [movedView setTransform:transform2];
        [UIView commitAnimations];
    }
    

    }

    Here the leftPanelView is the view that must come under a tab bar. Moved view is another view, that is at the right of left panel (don't mind it)

  • Denis Kutlubaev
    Denis Kutlubaev about 12 years
    I accept your answer, coz you've sent it after 2 mins, I posted. I think it's fair.
  • Rickster
    Rickster about 9 years
    This does not answer the question asked. All this does is move a view to the back of the subview chain. The answer below from He Shiming is correct.
  • MarkosDarkin
    MarkosDarkin over 6 years
    This should be the right answer. the above answer doesn't answer what was asked.