具体来说,在 iOS 11(而不是以前的操作系统)中,当您点击搜索栏开始输入时,它会跳到屏幕顶部。
当搜索栏已经接近屏幕顶部时,我可以使用以下代码修复此问题:
if #available(iOS 11, *) {
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
} else {
BugsTable.tableHeaderView = searchController.searchBar
}
但是,当我在视图中间有一个搜索栏(即其上方有其他元素)时,该代码将无法工作,因为它告诉导航控制器内的搜索栏。我看到了以下问题,但没有 Swift 的有效答案:
iOS 11 搜索栏跳转到屏幕顶部 https://stackoverflow.com/questions/45798923/ios-11-search-bar-jumping-to-top-of-screen
iOS 11 Searchcontroller 跳转到屏幕顶部 https://stackoverflow.com/questions/46221717/ios-11-searchcontroller-jumps-top-of-screen
我的 ViewDidLoad 设置参数是:
searchController.searchResultsUpdater = self
searchController.hidesNavigationBarDuringPresentation = false
searchController.dimsBackgroundDuringPresentation = false
searchController.searchBar.sizeToFit()
ResultsTable.tableHeaderView = searchController.searchBar
searchController.searchBar.barTintColor = MyGlobalVariable.themeMainColor
我在这里缺少什么?
尝试这个:
if (@available(iOS 11, *)){
[searchVC.searchBar addObserver:self forKeyPath:@"frame" options: NSKeyValueObservingOptionNew context:nil];
}else{
[view addSubview:searchVC.searchBar];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
CGRect rect = [change[@"new"] CGRectValue];
if (rect.origin.y == 14) {
CGRect temp = rect;
temp.origin.y = 20;
[self.searchVC.searchBar setValue:@(temp) forKey:@"frame"];
}else if (rect.size.height == 56){
CGRect temp = rect;
temp.size.height = 50;
[self.searchVC.searchBar setValue:@(temp) forKey:@"frame"];
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)