UITableViewCell + Autolayout + RTL

时间:2014-08-12 06:47:51

标签: ios objective-c uitableview localization autolayout

我正在将我的应用本地化为希伯来语,这是一种RTL语言 每个单元格都有水平约束设置为前导/尾随,它们在RTL语言中自动反转 最终结果完全符合预期,但在滚动表格视图时,UITableViewCell子视图从LTR到RTL的动画,这非常奇怪。

是否有解决方案阻止动画制作动画?

示例:

Imgur

在所有WWDC视频中也没有这个词......

2 个答案:

答案 0 :(得分:2)

你可以在 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath中为约束设置动画,我在我的代码中使用了一个例子,但是没有t为约束设置动画,但改为为单元格的contentview的图层变换设置动画

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    UIView *contentView = cell.contentView;
    contentView.layer.opacity = 0.0;
    contentView.layer.transform = CATransform3DMakeScale(0.2, 2, 0.3);
    [UIView animateWithDuration:0.5
                 animations:^{
                     contentView.layer.opacity = 1;
                     contentView.layer.transform = CATransform3DIdentity;
                 }];

}

答案 1 :(得分:1)

好的,所以UIView基本上是*.XIB文件中显示的原始布局,然后将布局更改为设备的本地化。

第一次显示我的UITableViewCell时,没有动画并且显示正确,我认为我的UITableView正在重复使用单元格,因为这是我定义的方式它,但实际上,由于我错误造成的另一个问题,我的tableView的内容大小在滚动期间发生了变化,旧的单元格没有被重复使用,导致像20" live& #34;由表视图同时进行子视图的单元格,因此每个新行刚刚启动了一个新的UITableViewCell,并且因为同时有一个方法正在执行

[UIView animateWithDuration:.2 animations:^{
    ...

    [self.view layoutIfNeeded];

    ...
}];

单元格的布局也是从LTR到RTL布局的动画。

无论如何,修复此行为的实现解决了重用单元格以及由全局视图的布局动画引起的奇怪动画。

希望它会帮助其他遇到类似事情的人。