【问题标题】:UITableViewCell + Autolayout + RTLUITableViewCell + 自动布局 + RTL
【发布时间】:2014-08-12 06:47:51
【问题描述】:

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

是否有防止视图动画化的解决方法?

例子:

在所有 WWDC 视频中也没有一个字...

【问题讨论】:

  • 能否请您添加一些示例项目链接?我刚刚用TableView 创建了一个新项目,在模拟器中添加了希伯来语本地化和更改语言。滚动后我看不到动画(启用或不启用慢速动画),但视图是 RTL 对齐的。
  • 你在-tableView:cellForRowAtIndexPath: 中尝试过[UIView performWithoutAnimations:^{}] 吗?
  • 这个单元格是从 xib 加载的吗?如果是这样,你是怎么做到的?您不必预先布局每个单元格,这听起来像是一个令人讨厌的解决方法。
  • 这会在水平滚动时在 UICollectionViews 中重现。看到这个:github.com/ybeapps/BugInUICollectionViewForIOS。你可以在bugreport.apple.com打开bug,他们解决了很多开发者多次打开的bug。我已经打开了一个错误

标签: ios objective-c uitableview localization autolayout


【解决方案1】:

您可以在 - (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;
                 }];

}

【讨论】:

  • 同样的工作,只是在动画块中对约束进行动画处理
【解决方案2】:

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

第一次显示我的UITableViewCells 时,没有动画并且它显示正确,我认为我的UITableView 正在重复使用它的单元格,因为这就是我定义它的方式,但实际上,由于另一个问题我错误地导致,我的 tableView 的内容大小在滚动过程中发生了变化,并且旧的单元格没有被重用,是什么导致了 20 个“活动”单元格同时被 table view 子查看,所以每个新行只是发起了一个新的UITableViewCell,因为同时有一个方法在执行

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

    [self.view layoutIfNeeded];

    ...
}];

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

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

希望它能帮助遇到类似情况的其他人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 2018-12-03
    • 2017-02-13
    相关资源
    最近更新 更多