【发布时间】:2015-01-16 01:59:57
【问题描述】:
朋友们,美好的一天!
我未能尝试通过代码为在 IB 中设置的视图设置动画。应用程序崩溃,原因如下:
视图层次结构没有为约束做好准备...
我在这里看到了一些类似的问题,原因总是以编程方式创建的视图尚未添加到超级视图中。但我在 IB 中创建了所有视图!
控制台还说:
在容器层次结构中找不到视图:(这里是超级视图)
这对我来说没有任何意义,因为实际上它是适当超级视图的子视图,xcode 知道 - 它会立即打印视图层次结构并且它适合。
可能是什么原因? 谢谢!
编辑:我使用的代码:
- (void)setEditingConstraintsForView:(UIView *)view
{
// Pin given view to top, fix it height
NSDictionary *givenView = @{@"view":view};
view.translatesAutoresizingMaskIntoConstraints = NO;
NSArray *horizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|" options:0 metrics:nil views:givenView];
NSArray *verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view(height)]" options:0 metrics:@{@"height":@(viewHeight)} views:givenView];
[self.animatedVIew addSubview:view];
for (NSArray *constraints in @[horizontalConstraints, verticalConstraints]) {
[view addConstraints:constraints];
}
}
我还删除了我在安装新的之前在 IB 中设置的所有约束:
- (NSDictionary *)constraintsFromIB
{
if (!_constraintsFromIB) {
_constraintsFromIB = @{@"view1":self.view1.referencingConstraintsInSuperviews,
@"view2":self.view2.referencingConstraintsInSuperviews,
@"view3":self.view3.referencingConstraintsInSuperviews };
}
return _constraintsFromIB;
}
然后:
- (void)updateViewConstraints
{
[super updateViewConstraints];
// clear all constraints
for (NSString *viewName in self.constraintsFromIB.allKeys) {
for (NSLayoutConstraint *constraint in self.constraintsFromIB[viewName]) {
[constraint remove];
}
} }
更新 2:我使用调用更改的方法:当用户触摸视图时,调用此方法:
- (void)animateConstraintsForState:(LDYEditingLabel)state
{
self.editingLabel = state;
[UIView animateWithDuration:0.3 animations:^{
[self updateViewConstraints];
[self.view layoutIfNeeded];
}];
}
后来在updateViewConstraints:有一段代码触发了我的方法setEditingConstraintsForView:(UIView *)view
【问题讨论】:
-
你能显示一些代码吗?
-
您从哪个方法调用此代码?
viewDidAppear?viewDidAppear?还是其他方法? -
刚刚添加了另一个编辑。它使用动画块从屏幕上的点击触发。
-
我看不出您在此处显示的问题。您可能需要设置断点,但我打算建议 Charlie Wu 刚刚在他的答案中添加的内容 - 如果可以的话,修改现有的约束 - 更容易
-
感谢您的建议。似乎将 IB 和硬编码方法混为一谈并不好。
标签: ios objective-c autolayout nslayoutconstraint