【问题标题】:Final layout rendering is animated while tableview is presented在呈现 tableview 时,最终布局渲染是动画的
【发布时间】:2013-04-22 12:03:33
【问题描述】:

我在自定义开发的 UI 控件中使用 tableview。
我的 tableView 的默认框架是 {0,0,0,0}..所以它不可见..我正在使用 UIview 的动画类方法和块 (animateWithDuration:delay:..etc..) 为这个 tableview 设置动画“进入屏幕”。动画块仅包含 frame.size 更改为 {0,0,320,250}。所以很明显,随着tableview框架的改变,一些单元格变得可见。

此外,我有一个自定义 UIView,其中包含四个 UILabel。标签正在捕捉到底部。 在 cellForRowAtIndexPath 中:我将此自定义视图添加到单元格的内容视图中,并调整此自定义视图的大小以匹配内容视图框架。

customView.frame = cell.frame;
[cell.contentView addSubview:customView];

我的问题是,由于单元格的高度不同,(在 heightForRowAtIndexPath 中解决)... 在主动画期间,特定单元格中的特定自定义视图正在更改其框架,有效地将标签垂直向下移动几个像素。

我希望他们在我展示 tableview 时已经在他们的位置上。~

如何做到这一点?

【问题讨论】:

  • 你在这里想要什么样的视觉效果?如果滑动到位效果(其内容相对于移动视图保持在原位),而不是成长到位(内容必须从零大小开始并拉伸),听起来百合你可能想要更多。如果是这种情况,也许您的表格应该保持其 size 不变,并从屏幕外某处开始为其 position 设置动画。

标签: ios cocoa-touch uitableview


【解决方案1】:

您需要使用单元格的 autoresizingMask 属性,或者:

您可以创建自定义表格视图单元格,添加这些视图,并在单元格的 layoutSubviews 中进行处理。

【讨论】:

  • 我希望标签不会被动画到它们的最终位置。当主表视图的动画发生时,我希望它们已经存在。所以问题不在于布局规则,而在于为什么标签以动画方式移动到它们的最终位置以及如何使单元格内的这种布局不动画。
  • 你有两个选项来解决这个问题——正如我所说的——> layoutSubviews 可以通过给它们固定的大小和位置来帮助你避免动画它们。第二个选项是等待动画结束,然后才添加它们。 (只需放置一个标志并在动画结束时再次重新加载数据或其他东西)。视图正在动画到它们的最终位置,因为如果您在动画中更改表格的框架,那么这些单元格内和 tableView 内的所有 layoutSubivews 也会进行动画处理。为避免这种情况,您需要以某种方式覆盖 layoutSubviews 或在最后添加它们。
  • 我将相应的代码移动到 layoutSubviews,它有帮助,现在没有动画发生,谢谢。
猜你喜欢
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 2020-03-21
相关资源
最近更新 更多