sel*_*nan 24 cocoa-touch uinavigationbar uikit ios uisearchcontroller
目前我正在尝试将UISearchController嵌入到我的应用程序中.但是UISearchBar是UISearchController的一个属性,如果UINavigationBar是非半透明的,则无法正确显示.通常在点击UISearchBar属性后,UINavigationBar向上移动以为UISearchBar腾出空间.您可以在以下屏幕截图中看到结果:
https://www.dropbox.com/s/172k63zr2bhj84t/Normal_behaviour.png?dl=0
但是如果UINavigationBar的"半透明"属性设置为"NO",则UISearchBar无法正确显示,因为状态栏的背景保持透明,如下面的屏幕截图所示:
https://www.dropbox.com/s/v5cnxoj9ms6976r/Wrong_behaviour.png?dl=0
为了演示这种奇怪的行为,我修改了Apple提供的示例项目:
https://developer.apple.com/library/ios/samplecode/TableSearch_UISearchController/Introduction/Intro.html
Run Code Online (Sandbox Code Playgroud)
在这里您可以下载修改后的版本:
https://www.dropbox.com/s/7icfe6kap98g1e8/TableSearchwithUISearchControllerObj-CandSwift_MODIFIED.zip?dl=0
Run Code Online (Sandbox Code Playgroud)
修改在文件"APLMainTableViewController.m"第33行.
Ort*_*ntz 25
这显然是一个错误(rdar:// 20942583).
我的解决方法是设置
self.edgesForExtendedLayout = UIRectEdgeAll;
self.extendedLayoutIncludesOpaqueBars = YES;
Run Code Online (Sandbox Code Playgroud)
这允许您保持导航栏不透明.缺点是即使无法看到内容,内容也会低于标准,从而产生一些开销.
Jiř*_*lka 11
我只需要:
func viewDidLoad() {
extendedLayoutIncludesOpaqueBars = true
}
Run Code Online (Sandbox Code Playgroud)
一种解决方法是在搜索变为活动状态之前使状态栏保持半透明状态,并在搜索变为非活动状态时删除半透明效果.
您可以通过将视图控制器注册为代理UISearchController
并实现willPresentSearchController
和willDismissSearchController
方法来完成此操作.例如(in Swift
):
将视图控制器声明为以下代理UISearchController
:
class MyViewController: UITableViewController, UISearchControllerDelegate
Run Code Online (Sandbox Code Playgroud)
不要忘记将其实际设置为委托,例如viewDidLoad
添加:
searchController.delegate = self
Run Code Online (Sandbox Code Playgroud)
最后:
func willPresentSearchController(searchController: UISearchController) {
navigationController?.navigationBar.translucent = true
}
func willDismissSearchController(searchController: UISearchController) {
navigationController?.navigationBar.translucent = false
}
Run Code Online (Sandbox Code Playgroud)