簡體   English   中英

UIPresentation控制器-從后台返回后布局出錯

[英]UIPresentation controller - layout going wrong after coming back from background

我實現了從ViewController A(嵌入在UINavigationController中)到ViewController B的自定義過渡。

過渡使用自定義UIViewControllerAnimatedTransitioning對象從底部“滑動” VC B直到其達到垂直屏幕尺寸的1/2。 定制演示文稿還會移動呈現的VC A,因此它會使用在自定義UIPresentationContorller presentationWillBegin()調用的animateAlongsideTransition(in:animation:compeltion)與傳入的VC B animateAlongsideTransition(in:animation:compeltion) UIPresentationContorller 考慮分屏顯示的VC的下1/2處在頂部,顯示的VC在底部。

一切都按預期工作,除了一個我似乎無法解決的煩人的案例:

  • VC A具有一些子視圖(按鈕),這些子視圖被限制(在界面生成器中為自動布局)到VC A的頂部布局指南(同樣,VC A在NavC中)。
  • 當我呈現模態視圖(B)時,這些子視圖將作為過渡的一部分向上推(大),而當VC B被取消時再次向下推(大)。
  • 但是,在呈現VC B並將應用程序置於后台然后又回到前台時,VC A的子視圖顯示在屏幕頂部-即,在VC A視圖的中間而不是頂部(壞)。 撤消VC B時,它們停留在中間(壞)-僅通過退出VC A並返回來解決此問題,才啟動完整的VC“重繪”。

我知道問題出在某種程度上在於回到前景時要重新校准頂部布局指南,但無法在顯示視圖之前弄清楚如何修復它。

一種可行的方法是將子視圖的約束設置為“ superview top”,而不是“ top layout guide”,但是這將其作為NavC的一部分超越了自動布局的要點。

  • 在這種情況下,絕對不會調用VC A的viewWillAppear/viewWillDisappear (因為VC A的視圖永遠不會被完全消除)。
  • 在這種情況下,都不調用自定義UIPresentationController containerViewWillLayoutSubviews/containerViewDidLayoutSubviews

任何想法表示贊賞。

iOS 10,Xcode 8.3

使用Xcode 9編譯並在iOS 11上運行似乎已經解決了這一問題。 參考上面我在Xcode 9 / iOS 11中的描述:

撤消VC B時,會自動將VC A的按鈕重新放置在VC A的頂部。重新放置雖然沒有動畫效果,但看起來很怪異,但是按預期工作,並遵循了頂部布局指南的自動布局約束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM