UISearchController 不会关闭搜索栏和重叠 iOS 8 Swift
UISearchController won't dismiss searchbar and overlap for iOS 8 Swift
我在使用 UISearchController 时遇到问题,如果我在搜索栏中有文本并关闭其中的 VC,搜索栏将不会消失,只会保留在屏幕上,与其他 [= 中的所有内容重叠23=]秒。然后,如果您点击取消按钮,它就会崩溃。
已经在 SO 上尝试了一些解决方案,但 none 有效。 :/
self.resultSearchController = ({
let controller = UISearchController(searchResultsController: nil)
controller.searchResultsUpdater = self
controller.dimsBackgroundDuringPresentation = false
controller.hidesNavigationBarDuringPresentation = false
controller.searchBar.sizeToFit()
controller.searchBar.searchBarStyle = UISearchBarStyle.Minimal
controller.searchBar.barTintColor = UIColor(red: 243/255, green: 243/255, blue: 243/255, alpha: 1)
controller.searchBar.tintColor = UIColor.blackColor()
controller.definesPresentationContext = true
controller.edgesForExtendedLayout = UIRectEdge.None
self.tableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0)
self.tableView.tableHeaderView = controller.searchBar
return controller
})()
非常感谢对此的任何帮助!
更新:所以我找到了一个不太好的解决方案,即在 viewWillDisappear 中设置 .active = false。但是,问题是 searchBar 工件会在 next/previous VC 上显示一秒钟,然后才会完全消失。
更改以下内容:
controller.definesPresentationContext = true
到
self.definesPresentationContext = true
当您将视图控制器推入和弹出导航堆栈时,该设置还会保留搜索栏的状态。
您可以在 Apple's Documentation on UIViewController 上阅读有关 definesPresentationContext
设置的信息。
如果您能够使用 self.definesPresentationContext = true 那么这可能是更好的方法。在我的配置中,我通过将 definesPresentationContext 设置为 false 来修复 UISearchController 的另一个错误。
所以我不再打电话给
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.searchController setActive:FALSE];
}
至:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
[super prepareForSegue:segue sender:sender];
[self.searchController setActive:FALSE];
}
这似乎可以解决问题。
我在使用 UISearchController 时遇到问题,如果我在搜索栏中有文本并关闭其中的 VC,搜索栏将不会消失,只会保留在屏幕上,与其他 [= 中的所有内容重叠23=]秒。然后,如果您点击取消按钮,它就会崩溃。
已经在 SO 上尝试了一些解决方案,但 none 有效。 :/
self.resultSearchController = ({
let controller = UISearchController(searchResultsController: nil)
controller.searchResultsUpdater = self
controller.dimsBackgroundDuringPresentation = false
controller.hidesNavigationBarDuringPresentation = false
controller.searchBar.sizeToFit()
controller.searchBar.searchBarStyle = UISearchBarStyle.Minimal
controller.searchBar.barTintColor = UIColor(red: 243/255, green: 243/255, blue: 243/255, alpha: 1)
controller.searchBar.tintColor = UIColor.blackColor()
controller.definesPresentationContext = true
controller.edgesForExtendedLayout = UIRectEdge.None
self.tableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0)
self.tableView.tableHeaderView = controller.searchBar
return controller
})()
非常感谢对此的任何帮助!
更新:所以我找到了一个不太好的解决方案,即在 viewWillDisappear 中设置 .active = false。但是,问题是 searchBar 工件会在 next/previous VC 上显示一秒钟,然后才会完全消失。
更改以下内容:
controller.definesPresentationContext = true
到
self.definesPresentationContext = true
当您将视图控制器推入和弹出导航堆栈时,该设置还会保留搜索栏的状态。
您可以在 Apple's Documentation on UIViewController 上阅读有关 definesPresentationContext
设置的信息。
如果您能够使用 self.definesPresentationContext = true 那么这可能是更好的方法。在我的配置中,我通过将 definesPresentationContext 设置为 false 来修复 UISearchController 的另一个错误。
所以我不再打电话给
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.searchController setActive:FALSE];
}
至:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
[super prepareForSegue:segue sender:sender];
[self.searchController setActive:FALSE];
}
这似乎可以解决问题。