簡體   English   中英

自動布局-在推送新視圖控制器的同時壓縮UINavigationController

[英]Autolayout - Compressing UINavigationController at the same time as pushing a new view controller

我正在使用iOS應用程序。 根視圖控制器包含一個UINavigationController,用於包裝應用程序的主要內容;以及footerViewController(音頻播放器),用於在動畫顯示時壓縮主要內容。

我正在使用自動布局來顯示和隱藏此頁腳,如下所示:

_footerVisibleConstraints = [… @“V:|[navControllerView][footerView(==90)]|" …];
_footerHiddenConstraints = [… @“V:|[navControllerView][footerView(==0)]|" …];

通常,這很好。 但是我正在努力解決一個問題。 我遇到一種情況,需要在UINavigationController堆棧上推送新視圖,並同時將頁腳設置為動畫:

[self.view layoutIfNeeded];
[UIView animateWithDuration:1.5f animations:^{
  [[self view] removeConstraints:_footerHiddenConstraints];
  [[self view] addConstraints:_footVisibleConstraints];
  [[self view] layoutIfNeeded];
}];

[navigationController pushViewController:newViewController animated:YES];

這種情況下的問題是newViewController的動畫處於捕捉到其最終(壓縮)狀態的狀態,而不是從視圖的整個起始高度開始。 因此,在頁腳動畫時,底部有一個縫隙。

我放慢了動畫的速度,並在此處發布了一段視頻來演示我的描述。

另外,請注意,當我彈出根視圖控制器時,UINavigationController中的內容也不被壓縮。

那么,有人可以向我解釋一下這是怎么回事嗎? 有沒有辦法實現我所追求的目標?

只需在VC的.h中添加一個變量,以指定是否需要打開頁腳。 然后,通過選中該變量,將頁腳動畫添加到didAppear方法中。 這將導致按照您希望它們發生的順序執行這些動作。

如果您希望兩個動畫同時發生,則需要繼承一個segue並添加一個自定義動畫。

暫無
暫無

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

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