在侧边栏菜单视图控制器(基于SWRevealViewController)中,我使用两个表来模拟两列。因此,当用户单击具有子选项的选项时,另一个表视图控制器会加载它们。 (见图)
现在的问题是,并非第一个表中的所有选项都有子选项。因此,我需要为第一个表(带有主选项的表)设置动画,以便在另一个表上没有要显示 的子选项时,它将采用完整的超视图宽度 。只有单击具有子选项的选项才能设置宽度的动画,以便两列并排显示。 (见图片)
(左:预期行为,右:当前行为)
显示子选项和重新加载表的逻辑已经完成,并且它完美运行。我唯一的问题是动画。要为表格宽度设置动画,我考虑为单元格内的标签设置自动布局,如下所示: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]
。
所以...任何线索我做错了什么? 谢谢大家!
答案 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
值。