简体   繁体   中英

How do I animate constraint changes if constraints are created programmatically with VFL?

I have trouble on something, I would be grateful if you could give me some advice.

Basically, I created some constraints with Visual Format Language and makes my base more dynamic. I didn't touch my views on storyboard.

You can consider red area as a navigationBar.

In example view looks like;

在此处输入图片说明

My problem is; I want to hide my topView on some viewController.

First I created a property;

@property (strong, nonatomic) NSLayoutConstraint *constraintTabbarHeight;

But I realized I couldn't set my NSLayoutConstraint property with VFL. Because VFL is create an array of constraints.

So this is my first question; Is there anyway to keep my VFL constraint with NSLayoutConstraint property?

Anyway, so I decided to create my height constraint with constraintWithItem method.

self.constraintTabbarHeight = [NSLayoutConstraint constraintWithItem:self.tabbarContainerView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:95];

Second, I search on stackoverflow and I have found a method. I can call this method from any viewController I want.

- (void)updateTabbarConstraintWith:(int) heightValue{
    self.constraintTabbarHeight.constant = heighValue;
        [UIView animateWithDuration:0.3
                     animations:^{
                         [self.view layoutIfNeeded];
                     }];
}

If I set self.constraintTabbarHeight.constant = 0 ,everything is fine. My TopView (redArea) is disappearing but PlaceholderView is still on same position.

I thought [self.view layoutIfNeeded] will update my placeholder View and it fills my screen.

It looks like this;

在此处输入图片说明

How do I make it correct?

Thanks for your answers.

您需要创建一个从placeholderView.Top到TopView.Bottom的约束,否则,一个约束将能够移动而不会影响其他约束

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM