自动布局弄乱了我的动画

Posted

技术标签:

【中文标题】自动布局弄乱了我的动画【英文标题】:Autolayout messing with my animations 【发布时间】:2014-11-19 09:34:54 【问题描述】:

所以我在视图控制器(不是 UITableViewController)中有一个 UITableView,为了支持 iphone 6 和 6 Plus,我开始实现 Autolayout。现在一切工作顺利,问题是我在该 UITableView 的每个单元格内的 UIViews 上调整了动画大小,现在动画不会调整内部视图的大小,约束似乎会影响 UITableView 内的所有内容,即使我只想通过不同的设备保持 UITableView 居中...

我在 UITableView 上使用的约束是:

内容视图中的 X 中心对齐 垂直空间(到内容视图的顶部,固定值 = 114) 垂直间距(到内容视图的底部,固定值 = 0) UITableView 上的固定宽度 (320)

所以基本上,如果我们在 iphone 4-5s 上我们有一个使用屏幕完整宽度的 tableview,同时 iphone 6 和 6 Plus 有一个 320 固定宽度的居中 tableview。

这是我第一次使用 AutoLayout,所以我不知道这些约束如何影响 UITableView 单元格内视图上的动画,这就是我进行调用的方式:

//before the call
barraActual.frame = CGRectMake(20, 24, 5, 30);
barraPromedio.frame = CGRectMake(295, 24, 5, 30);

//animate
[UIView animateWithDuration:1.5 animations:^
     barraActual.frame = CGRectMake(20, 24, periodoActual, 30);
     barraPromedio.frame = CGRectMake(20+periodoActual, 24, periodoAnterior, 30);
];

编辑:请注意,视图(barraActual 和 barraPromedio)是 UITableViewCell 中的 UIView,此代码位于“cellForRowAtIndexPath”中。

如何阻止约束阻止我的视图调整大小? (因为我已经尝试在没有动画调用的情况下设置框架并且也没有工作)

或者我如何进行符合这些约束的动画调用?

谢谢!

【问题讨论】:

使用自动布局,您永远不会自己更改框架属性,因为这将被自动布局覆盖。您只需使用约束指定布局。 那么,AutoLayout 与动画不兼容?我有两个 UIView(彩色),我根据数据按比例对它们进行动画处理(这就是它们在 tableviewcell 中的原因,因为它们永远不会相同),因此用户可以以图形方式感知百分比(更好看) 约束以 UITableView 为目标,我尝试制作动画的 UIVIews 在 UITableViewCell 内(在 UITableView 内) 不,一点也不。您根本不必自己设置框架属性(和其他属性)。您必须使用约束(例如到容器的距离、宽度、高度)来表达您的布局。如果这样做,屏幕大小的更改将自动处理。 BTW 约束是对象,可以是 IBOutlets,因此您可以动态更改它们,例如在动画中。 好的,我还在尝试了解 AutoLayout 的技术...有没有办法获取和更改 UIView 而不是 IBOutlet 的约束?因为在“cellForRowAtIndexPath”中,我只处理使用方法 [cell viewWithTag:X] 访问它们的视图 【参考方案1】:

感谢 Reinhard Männer 指导我,感谢那些可能发现自己与我有同样误解的人:

在使用 AutoLayout 时更改视图的框架将不起作用(有或没有动画)。要进行更改,您需要设置新的约束或更改现有的约束(很可能以编程方式)。

我在 Interface Builder 中创建了新的约束来管理我想要动画的视图,现在我的动画块看起来像这样:

//animate
[UIView animateWithDuration:1.5 animations:^
    ((NSLayoutConstraint*)(barraActual.constraints[1])).constant = periodoActual;
    ((NSLayoutConstraint*)(barraPromedio.constraints[0])).constant = periodoAnterior;
];

晚安:)

【讨论】:

以上是关于自动布局弄乱了我的动画的主要内容,如果未能解决你的问题,请参考以下文章

UISearchController 与单元格布局混淆

为啥 QTextBrowser 弄乱了我的 HTML 代码?

添加和删​​除 UIStackViews 弄乱了我的 UIScrollView

Php 弄乱了我的上传大小

Firebase (FCM) 响应弄乱了我的响应

Rails 弄乱了我的 Postgres TIME 列