Dav*_*ang 53 uisearchbar ios swift uisearchcontroller ios9
结构:
View1(单击按钮) - >以模态方式呈现(MyModalView:UITableViewController)
MyModalView嵌入了UISearchController.UISearchController的searchBar放在MyModalView.tableView.tableHeaderView中.
自iOS 8.0起,它一直运行良好.但是在iOS 9上,当UISearchController处于活动状态时,searchBar会消失.请看下面这些图片
UISearchController在iOS 8上处于活动状态:
UISearchController在iOS 9上处于活动状态:
非常标准的代码:
override func viewDidLoad() {
super.viewDidLoad()
// Dynamically create a search controller using anonymous function
self.resultSearchController = ({
let controller = UISearchController(searchResultsController: nil)
controller.searchResultsUpdater = self
controller.dimsBackgroundDuringPresentation = false
controller.searchBar.sizeToFit()
controller.searchBar.delegate = self
self.tableView.tableHeaderView = controller.searchBar
return controller
})()
// Auto sizing row & cell height
self.tableView.estimatedRowHeight = 130
self.tableView.rowHeight = UITableViewAutomaticDimension
self.definesPresentationContext = true
// No footer for better presentation
self.tableView.tableFooterView = UIView.init(frame: CGRectZero)
}
Run Code Online (Sandbox Code Playgroud)
这个问题也发生在iOS 9.1 beta ...
任何想法/指针都将深受赞赏
干杯.
Shw*_*car 68
我不确定究竟是什么问题,但我通过以下方式解决了这个问题:
self.searchController.hidesNavigationBarDuringPresentation = NO;
self.definesPresentationContext = NO;
Run Code Online (Sandbox Code Playgroud)
我的猜测是,UISearchController当它试图呈现为导航栏时,它正在做一些时髦的事情.所以,这是一个黑客,但它至少不会阻止用户.搜索栏不会执行很酷的动画并掩盖导航栏.
Dav*_*ang 67
似乎我们所有人都遇到了同样的问题,但他们以不同的方式解决了.然而,没有一个建议的答案对我有用:(.尽管如此,谢谢大家的时间.
我找到了解决问题的解决方案.它使用Interface Builder在Storyboard中将我的(MyModalView:UITableViewController)的Opaque Bars下的Extend Edges设置为true.
综上所述:
MyModalView:UITableViewController,在Storyboard中使用Interface Builder
延伸边缘: - 在顶栏下方勾选 - 在底栏下方勾选 - 在不透明栏下勾选
wil*_*uan 36
我发现故事板中的模拟指标(顶部栏)导致了这个问题.在我的情况下,以下几行有效,但我仍然不知道为什么.
- (void)willPresentSearchController:(UISearchController *)searchController {
// do something before the search controller is presented
self.navigationController.navigationBar.translucent = YES;
}
-(void)willDismissSearchController:(UISearchController *)searchController
{
self.navigationController.navigationBar.translucent = NO;
}
Run Code Online (Sandbox Code Playgroud)
jig*_*zat 19
我不得不
self.aNavigationController?.extendedLayoutIncludesOpaqueBars = true
Run Code Online (Sandbox Code Playgroud)
我在这里找到了一个类似的问题,但在我的情况下,它不在viewDidLoad方法上.我必须尝试不同的观点,直到它奏效.现在我可以同时拥有自定义导航栏颜色和搜索栏,
小智 10
谢谢@wiles duan和@Techprimate
就我而言,我通过设置修复了这个问题:
self.definesPresentationContext = NO;
Run Code Online (Sandbox Code Playgroud)
并在UISearchControllerDelegate中实现以下两个方法
- (void)willPresentSearchController:(UISearchController *)searchController {
// do something before the search controller is presented
self.navigationController.navigationBar.translucent = YES;
}
-(void)willDismissSearchController:(UISearchController *)searchController
{
self.navigationController.navigationBar.translucent = NO;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30158 次 |
| 最近记录: |