2015-07-11 48 views
0

我有一个带有单元格的标准tableView。iOS:无法在加载表格视图时更新单元格中的视图框架

在这些单元格中,有一个视图需要在滚动时更改框架位置。

我做了一个更新的功能取决于其位置的tableview内的画面(我使用convertRect(_:toView:)
滚动时,它的正常工作,我打电话UIScrollViewDelegate功能scrollViewDidScroll(_)内此功能。

我的问题是在加载单元格时设置视图的初始位置。

为此,我打电话给我在tableView(_:willDisplayCellforRowAtIndexPath:)中调用的相同功能,以便在准备显示时设置视图的框架。

当我在函数后面记录视图框架时,它具有期望的值,但是在屏幕上视图位于错误的位置,就像显示没有刷新一样。

我知道改变一个框架,而加载视图可能会很棘手,导致这样的事情,但我试过我可以想到和发现的一切,无论在哪个tableview/cell函数我试图更新视图的框架,它不会改变,直到我开始滚动。

对于记录,我试图在:

  • 主控制器tableView(_:willDisplayCellforRowAtIndexPath:)
  • 主控制器viewDidAppear()
  • 细胞layoutSubviews()
  • 细胞drawRect()

我也试图与在约束自动布局,但没有任何关系。

我确信我错过了加载单元格时更新框架的正确位置,但我无法弄清楚。

感谢您的帮助

回答

0

尝试在

的cellForRowAtIndexPath设置的UITableViewCell subivews的初步框架:

+0

这太快了这个功能,电池的框架不被初始化但是 – Sylver

+0

你可以先初始化你想要的任何东西,然后调用tableView.reloadData(),并且cellForRowAtIndexPath将被再次调用到每个单元格 –

+0

不,它取决于单元格框架,它不是还没有在tableView(_:cellForRowAtIndexPath :)。调用reloadData并不能解决任何问题,但是加载所有tableview是没用的。在最好的情况下,不需要做任何重新加载。 – Sylver

相关问题