2016-09-13 23 views
1

當我旋轉設備時,舊視圖會旋轉但保持原有尺寸,只是使用部分屏幕,直到屏幕被觸摸,渲染。 (這是處於釋放模式:在調試模式下,它會自動重新渲染,但延遲一秒或兩秒後纔會自動重新渲染)。這發生在運行iOS7和iOS9的模擬器和設備上。當設備旋轉時,原生ios應用不會重新渲染

將我的應用程序從react-native 0.24.1升級到0.32.0後開始出現此問題。當然,這種升級就像從毛衣中拉出一條線,使得有必要升級大量第三方反應原生庫。特別是,將react-native-router-flux從3.24.1升級到3.35.0需要我的代碼進行很多更改。

這就是說,我想不出任何我可能導致這個問題的變化。起初我懷疑react-native-orientation,這對升級特別棘手,所以我完全從項目中刪除了它,但這並沒有幫助。

我在頂級視圖中添加了onLayout事件的回調,打印輸出爲console.log。在設備旋轉後,該事件顯然不會被觸發,直到觸摸屏幕。然後打印onLayout調試語句,同時反應原生代碼重新顯示。

所以看起來,本地代碼不是通過網橋發送旋轉事件到JavaScript代碼,直到它可以搭載其他事件。

有關如何調試此任何建議將不勝感激。

更新:我只記得關於flex:1的注意事項react-native 0.28的突破變化。我想知道這可能與它有什麼關係?他們說:

如果您以前使用柔性:1,其中沒有必要的這種變化可能會打破你的佈局

的問題是,當是必要的,你怎麼知道是否有必要或不?我似乎無法找到它的文件。我一直都在使用flex:1,因爲我發現如果你不這樣做,會發生不好的事情。在Scrollview文檔中說:

忘記轉移{柔性:1}下來視圖棧可能會導致錯誤這裏

現在看來,如果你做不好的事情都可能發生。遊民。看起來他們真的希望你知道你在做什麼。什麼是黑客要做的?

更新2:這似乎不是問題。當然,黑客做什麼是黑客攻擊。我從最高層開始逐個刪除每個{flex: 1}。在大多數情況下,它打破了佈局,絕不會解決這個問題。

回答

2

這顯然是react-native 0.32.0中的一個錯誤。

我決定清理一切,從故宮重新安裝:

rm -rf $TMPDIR/react-* && watchman watch-del-all && rm -rf ios/build/ModuleCache/* && rm -rf node_modules/ && npm cache clean && npm i

當我做它撿起react-native 0.32.1和問題走了。 0.32.1有一個commit似乎可能與此有關。

0

在RN 0.44.0中它仍然不起作用,我在每個渲染中檢查屏幕寬度並相應地調整兒童大小,但在設備旋轉時不調用render。只有當我按Cmd-D進行刷新時,所有內容才能重新正確渲染。

render() { 
    let { width } = Dimensions.get('window'); 
    ... 
} 
相關問題