【发布时间】:2015-10-20 04:36:38
【问题描述】:
我在情节提要中有一个控制器,它由两个容器视图组成。我将两个容器之间的垂直距离设置为零。
我想要的是在运行时更改其中一个容器的高度约束。
这里是改变约束的代码:
[UIView animateWithDuration:kAnimationDuration animations:^{
self.offeringContainerHeightConstraint.constant = [SJDataManager shared].offeringItems.count * kOfferingCellHeight + kOfferingHeaderHeight;
[self.view layoutIfNeeded];
}];
问题是,另一个容器视图在之前移动,因此两个容器之间存在空白区域,直到动画完成。
我希望两个容器视图应该同步更改它们的约束值,以便可以消除这种闪烁。
【问题讨论】:
-
我认为(但我不确定)animateWithDuration 是在后台线程上执行的,而 layoutIfNeeded 应该在主线程上执行。如果你像这样封装它会发生什么 dispatch_async(dispatch_get_main_queue(), ^{[self.view layoutIfNeeded]; });
-
它让整个动画一次出现,看起来很糟糕。
-
我以为这是你的意图对不起。但至少闪烁消失了吗?
-
是的,闪烁消失了,但我想要的是没有闪烁的动画。
标签: ios objective-c iphone ios7 storyboard