UIView addSubview auto layout not working

前端 未结 3 623
Happy的楠姐
Happy的楠姐 2021-01-19 23:46

I created a UIView programatically and add NSLayoutConstraint to it and it works and then add it as a subView of view controller\'s view. Right now I need to remove this vie

相关标签:
3条回答
  • 2021-01-20 00:00

    When you create constraints assign it to variables

    @property (nonatomic, strong)NSLayoutConstraint *viewConstraintTop;
    self.viewConstraintTop = [Your Constraint];
    

    When you want to remove it from the superview remove the constraints

    [self.viewConstraintTop autoRemove];
    

    Remove your view and again while adding assign the constraint as

    self.viewConstraintTop = [Your Constraint];
    
    0 讨论(0)
  • 2021-01-20 00:15

    You need to take care of some points while adding and removing views from auto layout.

    There are two methods available in UIView.h class

    // Allows you to perform layout before the drawing cycle happens. 
    //   -layoutIfNeeded forces layout early
    - (void)setNeedsLayout;
    - (void)layoutIfNeeded;
    

    Use these methods as per your requirement. So i suggest when ever you remove subview from view, Update constraint of superior view if it is required. And then call below method to reflect layout changes.

    [self.view layoutIfNeeded];
    

    Most cases above method will solve all layout related issues. However some time if complex structure is there i mean runtime changing behaviour of views.

    Then override below method in your UIViewController, Perform all frame related changes in this method.

    - (void)viewDidLayoutSubviews
    
    0 讨论(0)
  • 2021-01-20 00:15

    The problem is the sub view does not inherit the original view's size/frame, and therefore adds the view as if it was stuck in the Any+Any size of 600x600. My solution, is to set the frame of the original view, and then let iOS do the remainder of the work.

    [self.myOtherView setFrame:self.view.frame];   //Replace frame size with already resized view
    [self.myOtherView setNeedsLayout];  //Tell iOS to autolayout the new sub view
    [self.addSubView:self.myOtherView];  //Add it
    
    0 讨论(0)
提交回复
热议问题