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

Posted

技术标签:

【中文标题】如果约束是使用 VFL 以编程方式创建的,如何为约束更改设置动画?【英文标题】:How do I animate constraint changes if constraints are created programmatically with VFL? 【发布时间】:2016-06-01 11:43:26 【问题描述】:

我遇到了一些问题,如果您能给我一些建议,我将不胜感激。

基本上,我使用可视格式语言创建了一些约束,并使我的基础更加动态。我没有触及我对故事板的看法。

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

在示例视图中看起来像;

我的问题是;我想在某个 viewController 上隐藏我的 topView。

首先我创建了一个属性;

@property (strong, nonatomic) NSLayoutConstraint *constraintTabbarHeight;

但我意识到我无法使用 VFL 设置我的 NSLayoutConstraint 属性。因为 VFL 是创建一个约束数组。

这是我的第一个问题; 有没有办法用 NSLayoutConstraint 属性来保持我的 VFL 约束?

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

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

其次,我在***上搜索,我找到了一个方法。我可以从任何我想要的 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] 会更新我的占位符视图并填满我的屏幕。

看起来像这样;

我如何使它正确?

感谢您的回答。

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于如果约束是使用 VFL 以编程方式创建的,如何为约束更改设置动画?的主要内容,如果未能解决你的问题,请参考以下文章

如何为我在 Swift 中以编程方式创建的 UIViewController 子类创建 init?

使用堆栈视图和自动布局创建自定义 UITableViewCell

如何为 CustomTableView Cell 应用 layoutConstraints

如何以特定格式以编程方式创建pdf?

以编程方式为不同大小类创建具有不同常量的自动布局约束

带有 VFL 约束的 iOS 多行文本