如果使用VFL以编程方式创建约束,如何为约束更改设置动画?

时间:2016-06-01 11:43:27

标签: ios objective-c uiview nslayoutconstraint visual-format-language

我遇到麻烦,如果你能给我一些建议,我将不胜感激。

基本上,我用Visual Format Language创建了一些约束,使我的基础更具动态性。我没有在故事板上触摸我的观点。

您可以将红色区域视为导航栏。

在示例视图中看起来像;

enter image description here

我的问题是;我想在一些viewController上隐藏我的topView。

首先我创建了一个属性;

@property (strong, nonatomic) NSLayoutConstraint *constraintTabbarHeight;

但我意识到我无法用VFL设置 NSLayoutConstraint 属性。因为VFL创建了一系列约束。

所以这是我的第一个问题; 无论如何要保持我的VFL约束与NSLayoutConstraint属性?

无论如何,所以我决定用 constraintWithItem 方法创建我的身高约束。

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

其次,我在stackoverflow上搜索,我找到了一个方法。我可以从任何我想要的viewController中调用此方法。

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

如果我设置self.constraintTabbarHeight.constant = 0,一切都很好。我的TopView(redArea)正在消失,但PlaceholderView仍处于同一位置。

我认为[self.view layoutIfNeeded]会更新我的占位符视图,它会填满我的屏幕。

看起来像这样;

enter image description here

如何使其正确?

感谢您的回答。

1 个答案:

答案 0 :(得分:0)

您需要从placeholderView.Top到TopView.Bottom创建一个约束,否则,一个人可以在不影响另一个的情况下移动