如何修复iOS 11搜索栏跳跃到Select(Swift)上的屏幕顶部



特别是使用iOS 11(而不是以前的操作系统),当您点击搜索栏开始键入时,它会跳到屏幕的顶部。

我可以通过使用此代码在屏幕顶部附近时可以解决此问题:

if #available(iOS 11, *) {
     navigationItem.searchController = searchController
     navigationItem.hidesSearchBarWhenScrolling = false
} else {
     BugsTable.tableHeaderView = searchController.searchBar
}

但是,当我在视图中间有一个搜索栏(即其他元素上方)时,该代码无法正常工作,因为它告诉导航控制器内的搜索栏。我看到了以下问题,但是对于Swift没有工作答案:

ios 11搜索栏跳到屏幕顶部

ios 11 SearchController跳跃屏幕顶部

我的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"];
        }
    }

最新更新