它看起來像我在navigationController pushViewController方法中發現一個錯誤。重新創建它我把樣本主詳細項目並作了一些修改的-didSelectRow:
方法:ios7 navigationController pushViewController動畫bug
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
DetailViewController* view = [self.storyboard instantiateViewControllerWithIdentifier: @"view"];
NSDate *object = _objects[indexPath.row];
[view setDetailItem:object];
[self.detailViewController.navigationController pushViewController:view animated:YES];
}
我也改變了詳細視圖爲「視圖」的故事板ID。這裏是發生了什麼:
當選擇任何大師的行慢(當推動畫已完成),它工作正常:
如果選擇任何行,而動畫仍然顯示,詳細信息視圖處於非活動狀態(顯示的最後一行調用了該bug前推法),只有在導航欄上顯示了一個新的觀點的推動畫:
發生這種情況時,你得到的調試器輸出一些警告:
Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
nested push animation can result in corrupted navigation bar
Unbalanced calls to begin/end appearance transitions for <DetailViewController: 0x8a6e070>.
這裏是討厭的部分:如果你回去的詳細視圖的導航欄上,然後選擇在碩士tableview中不同的行或後退兩次在細節的應用程序崩潰與
Can't add self as subview
,但如果你在ios6上運行相同的代碼,沒有任何問題或警告。
目前的解決方案:
調用帶有動畫的方法:NO似乎沒有任何問題的工作,顯然沒有推動畫。
另一種解決方法是在Master中將布爾值設置爲false,以便在調用push方法時將其設置爲true,並將其設置爲來自Detail in Detail的viewDidAppear中的true。這樣你可以在調用push方法時檢查值。缺點:如果你嘗試快速選擇同一行,如果你快速選擇不同的行然後它不會顯示在Detail中,但它會在Master tableview中被選中並突出顯示,那麼tableView可能會出現laggy,你可以保存選中的行索引並更改代碼中的選擇,但會導致閃爍的行高亮。
這兩個解決方案都涉及一些妥協,所以我想找到另一種處理方法。有沒有更好的解決方案?
聽起來像你理解發生了什麼以及任何人。如果你有問題,請明確說明。如果你只是提供這個作爲其他人有用的觀察,你應該以問題形式重寫它,在答案中添加解決方案,並接受答案,以便很明顯,你不需要人們花時間在它上面。另外,如果你還沒有,你應該[向Apple報告錯誤](https://developer.apple.com/bug-reporting/)。 – Caleb
對不起,我打算髮布此尋找其他方法來解決此 – Arnas