【问题标题】:Prevent views from popping from the top left during animations on iOS在 iOS 上的动画期间防止视图从左上角弹出
【发布时间】:2016-04-03 14:16:53
【问题描述】:

有时当表格视图单元格出现在动画中时,例如-[UIView viewWillAppear:animated]-[UITableView reloadData],其中的内容会从左上角 (0, 0) 弹出到最后一帧。这个问题也发生在其他视图动画中。回到过去,这个问题并不存在。在一次 iOS 更新中,问题出现了,但初始位置是随机的,通常在屏幕之外。在另一个 iOS 更新中,问题变得确定性,初始位置为 (0,0)。

我在[tableView reloadData]cellForRowAtIndexPath 的单元格上尝试过[tableView layoutIfNeeded][tableView.layer displayIfNeeded]。我错过了什么?

我上传了一个示例项目https://github.com/keithyipkw/ios-animation-bug。 要可靠地重现问题,请在重新加载数据之前在 viewWillAppear 处设置断点。下拉屏幕以显示今日中心。在完全可见的今天中心之后运行。

【问题讨论】:

    标签: ios objective-c uitableview cocoa-touch uiviewanimation


    【解决方案1】:

    我也有同样的问题,电视第一次显示单元格时会出现这种情况。
    这是因为单元格是在情节提要中使用原型的初始大小创建的,然后根据电视宽度调整大小。 为了避免在cellForRowAtIndexPath 中出现这种情况,我将单元格上的宽度设置为电视的大小,并强制单元格上的自动布局更新,以使所有元素都适合该大小。
    我仍然没有找到真正的解决方案这更像是一个技巧,我希望其他人对您的问题提供反馈。

    【讨论】:

      【解决方案2】:

      解决方法是使用带有重用标识符的 dequeue 和 init 单元格。当单元格第一次出现时,它仍然有效。神奇的是使用相同的非空标识符出列和初始化。

      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
      if (!cell) {
          cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
      }
      

      【讨论】:

        猜你喜欢
        • 2021-06-28
        • 1970-01-01
        • 2021-06-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-15
        • 1970-01-01
        • 2011-07-16
        • 1970-01-01
        相关资源
        最近更新 更多