动画UITableView宽度约束

时间:2014-12-10 17:16:44

标签: ios uitableview animation autolayout

在侧边栏菜单视图控制器(基于SWRevealViewController)中,我使用两个表来模拟两列。因此,当用户单击具有子选项的选项时,另一个表视图控制器会加载它们。 (见图)

An option with sub-options

现在的问题是,并非第一个表中的所有选项都有子选项。因此,我需要为第一个表(带有主选项的表)设置动画,以便在另一个表上没有要显示 的子选项时,它将采用完整的超视图宽度 。只有单击具有子选项的选项才能设置宽度的动画,以便两列并排显示。 (见图片)

(左:预期行为,右:当前行为)

Intended behaviour current behaviour

显示子选项和重新加载表的逻辑已经完成,并且它完美运行。我唯一的问题是动画。要为表格宽度设置动画,我考虑为单元格内的标签设置自动布局,如下所示:H:|-8-Label-8-|, V:|-8-Label-8-|,以及两个表:H:|LeftTable(LeftTableWidth)-0-RightTable|,为LeftTableWidth约束创建出口。因此,当我需要为它们制作动画时,我会这样做:

[self.view layoutIfNeeded];
self.subTableWidthConstraint.constant = width;
[UITableView animateWithDuration:0.45f
                 animations:^{
                     [self.view layoutIfNeeded];
                 }];

现在表格宽度正确动画。但是,单元格内的标签不会从初始宽度值动画到最终值。相反,它们的新值会立即设置,约束变更的那一刻(在表格完成动画之前)。我甚至试图删除除了以外的所有内容:

self.subTableWidthConstraint.constant = width;

他们仍然可以获得新值,甚至无需致电[self.view updateConstraints]

所以...任何线索我做错了什么? 谢谢大家!

2 个答案:

答案 0 :(得分:0)

我对动画有同样的问题 - layoutIfNeeded用于动画块中所有与动画相关的视图对我有帮助。

self.subTableWidthConstraint.constant = width;
[self.subTable setNeedsUpdateConstraints];
[UITableView animateWithDuration:0.45f
                                            animations:^{
                                                [self.subTable layoutIfNeeded];
                                                [self.mainTable layoutIfNeeded];
                                                [self.view layoutIfNeeded];
                                            }];

答案 1 :(得分:0)

想出来了!由于我使用的是RTL语言,因此我需要将标签的模式设置为Right而不是默认的Left值。 enter image description here