2016-04-03 53 views
3

有時,當表格視圖單元格出現在動畫中時,其中的內容-[UITableView reloadData]將從其左上角(0,0)彈出到最終幀。這個問題也發生在其他視圖動畫中。回到過去,這個問題並不存在。在一次iOS更新中,問題出現了,但初始位置是隨機的,通常在屏幕之外。在另一個iOS更新中,問題變得確定,初始位置爲(0,0)。防止視頻在iOS上的動畫播放期間從左上角彈出

我試過[tableView layoutIfNeeded],[tableView.layer displayIfNeeded]之後[tableView reloadData]和那些在cellForRowAtIndexPath的單元格。我錯過了什麼?

我上傳了一個示例項目https://github.com/keithyipkw/ios-animation-bug。 要可靠地重現問題,請在reloadData之前在viewWillAppear處設置斷點。拉下屏幕以顯示今日中心。在今日中心完全可見之後運行。

screenshots

回答

0

此修復程序是使用帶重用標識符的出列和初始單元。當細胞第一次出現時它仍然有效。神奇的是使用相同的非空標識符進行出列和初始化。

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

我有同樣的問題也出現這種情況時,電視顯示單元首次。
這是由於這樣一個事實,即單元格是在故事板中用原型的初始大小創建的,隨後在基於電視寬度的大小上調整大小。 爲了避免在cellForRowAtIndexPath中的設置,我將單元格的寬度設置爲電視的大小,並強制在單元格上進行自動佈局更新,以使所有元素都適合該大小。
我還沒有找到真正的解決方案,這是更多的伎倆,我希望別人給你的問題提供一個反饋。