如果约束是使用 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