Jam*_*ost 5 animation uinavigationcontroller uisplitviewcontroller ios swift
我有一个标准的UISplitViewController
,在其主窗格和细节窗格中都有导航控制器。大多数情况下,拆分视图控制器都preferredDisplayMode
设置为 ,.allVisible
以便主视图和细节视图都可见。
当我将特定的视图控制器推送到详细信息导航堆栈时,我想隐藏主窗格,以便用户拥有更多的“全屏”视图。为了实现这一点,我尝试将详细视图控制器的更改preferredDisplayMode
为.primaryHidden
in viewWillAppear
,然后将其更改回viewWillDisappear
. 然而,这会导致非常糟糕的动画,并且在过渡结束时错误地放置了视图。
我不确定如何解决这个问题。我已经尝试在不同的时间更改显示模式,将调用更改preferredDisplayMode
为动画块(尽管它无论如何都是隐式动画的),并要求视图控制器的视图将自己放回原处。它在动画块中看起来好一点,并且视图最终正确放置,但动画仍然有点奇怪和跳跃。
那么,如何修复动画并实现我正在寻找的外观?
我整理了一个最小的示例项目来演示这个问题。只需单击详细视图控制器中的“推送”按钮,即可显示重新配置拆分视图控制器的视图控制器。
小智 1
prepareForSegue
尝试在 DetailViewController 中使用。这将改变.preferredDisplayStyle
您在呈现 FullscreenViewControllerUISplitViewController
之前的状态,并具有更流畅的动画。
在故事板中,选择从“推送”按钮到 FullscreenViewController 的显示序列并设置其标识符(我总是使用目标 ViewController 的名称。)然后在 DetailViewController 中:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "FullscreenViewController" {
self.splitViewController?.preferredDisplayMode = .primaryHidden
}
}
Run Code Online (Sandbox Code Playgroud)
为了在导航“返回”到 DetailViewController 时快速修复,我添加了
self.splitViewController?.preferredDisplayMode = .allVisible
Run Code Online (Sandbox Code Playgroud)
到viewWillAppear
DetailViewController 中。我通常使用委托在视图控制器之间传递数据,并在那里设置显示模式。希望有帮助。
归档时间: |
|
查看次数: |
941 次 |
最近记录: |