iOS 11中使用SearchController时无法与视图交互该如何解决?
解决iOS 11中UISearchController遮罩阻止视图交互的问题
你遇到的这个灰色遮罩问题在iOS 11的UISearchController里挺常见的,尤其是当你设置searchResultsController: nil(用当前控制器展示搜索结果)的时候。下面是几个亲测有效的解决办法:
关闭背景遮罩效果
UISearchController默认会在激活时添加半透明遮罩来模糊背景,这就是你看到的灰色视图。直接把dimsBackgroundDuringPresentation设为false就能去掉它:searchController = UISearchController(searchResultsController: nil) searchController.dimsBackgroundDuringPresentation = false // 关键设置禁用导航栏隐藏(如果用到导航栏)
如果你用了UINavigationController,iOS 11里hidesNavigationBarDuringPresentation这个属性可能会和遮罩逻辑冲突,导致即使关闭了dimsBackground,还是有交互阻断的问题。可以把它也设为false:searchController.hidesNavigationBarDuringPresentation = false正确绑定到导航栏(iOS 11+推荐方式)
iOS 11开始推荐直接把searchController赋值给navigationItem的searchController属性,而不是手动添加searchBar到tableHeaderView,这样系统会自动处理遮罩和交互逻辑,避免出现异常:navigationItem.searchController = searchController // 如果你希望搜索栏一直显示在导航栏下方,还可以加这个 navigationItem.hidesSearchBarWhenScrolling = false
另外要注意:如果你是手动把searchBar添加到tableView的header里,一定要确保布局约束正确,避免因为视图层级问题导致遮罩层没有被正确移除。
内容的提问来源于stack exchange,提问作者ikbal
相关产品推荐
相关产品推荐

