UISearchController persisting after segue

巧了我就是萌 提交于 2019-11-27 13:56:02
Praveen Gowda I V

You can hide the searchController manually by setting the active property to false in prepareForSegue. Add the below code in prepareForSegue()

searchController.active = false

Alternatively, you should add the following line in viewDidLoad() to get the default behaviour

definesPresentationContext = true

From the documentation for definesPresentationContext

A Boolean value that indicates whether this view controller's view is covered when the view controller or one of its descendants presents a view controller.

Discussion

When a view controller is presented, iOS starts with the presenting view controller and asks it if it wants to provide the presentation context. If the presenting view controller does not provide a context, then iOS asks the presenting view controller's parent view controller. iOS searches up through the view controller hierarchy until a view controller provides a presentation context. If no view controller offers to provide a context, the window's root view controller provides the presentation context.

If a view controller returns true, then it provides a presentation context. The portion of the window covered by the view controller's view determines the size of the presented view controller's view. The default value for this property is false.

Important note (from @paulvs in the comments)

Little gotcha. Set definesPresentationContext on the view controller, not the search controller, I think this is worth emphasising.

If you manage your own transitions and use popToViewController to leave the view, provide the context on the searchController instead of the view

searchController.definesPresentationContext = true

or you will get an error

popToViewController:transition: called on <UINavigationController 0x7f984204f800> while an existing transition or presentation is occurring; the navigation stack will not be updated
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!