禁用一个视图的自动布局动画

8

抱歉,我不知道更好的标题。

问题:

我有一个使用自动布局的UITableViewCell,在nib文件中默认高度为300。300是其中一个UIViewControllers的正确大小。

我在容器视图中使用了一个名为FooterViewUIView,并在其中嵌套了一个UINavigationController

容器视图中有两个UIViewControllersVC1VC2

当我将VC2推到VC1时,我还会更改FooterView的高度约束常量。

我在一个动画块内进行此操作,并使用[self.view setNeedsLayout];

我将VC2中的UITableViewCell的高度设置为200。

现在的问题是,当我从VC1转换到VC2时,你也会看到UITableViewCell从300到200被动画化。

我的猜测是这是由于动画块引起的。我通过删除动画进行了测试,发现单元格没有动画(预期结果)。

有没有办法停止这种动画链接?

如果我表述不够清楚,还请见谅。


你真的需要调用 setNeedsLayout 吗?你可以指定哪个视图要动画,哪个不需要。 - kientux
你的意思是通过动画来改变框架吗?问题在于容器视图的底部约束与FooterView的顶部约束相连,当我使用动画改变FooterView的框架时,这个约束也会被动画化吗? - Rick van der Linde
我认为我误解了你的情况。有一张屏幕截图会很好。 - kientux
非常抱歉写的不好,我无法附加截图,因为这是客户的项目。 - Rick van der Linde
1个回答

15

我所需要做的就是在单元格内覆盖layoutSubviews

- (void)layoutSubviews
{
    [UIView performWithoutAnimation:^{
        [super layoutSubviews];
        [self.contentView layoutIfNeeded];
        _shadowView.layer.shadowPath = [UIBezierPath bezierPathWithRect:_shadowView.bounds].CGPath;
    }];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接