2017-09-25 64 views
2

具体来说,在iOS 11(而不是以前的操作系统)中,当您点击搜索栏开始输入时,它会跳转到屏幕顶部。如何修复iOS 11搜索栏跳到屏幕顶部选择(斯威夫特)?

我可以解决这个问题时,搜索栏已接近屏幕的顶端通过使用此代码:

if #available(iOS 11, *) { 
    navigationItem.searchController = searchController 

    navigationItem.hidesSearchBarWhenScrolling = false 
} else { 
    BugsTable.tableHeaderView = searchController.searchBar 
} 

但是,当我有一个看法中间的搜索栏(即其他一些元素在它上面),那个代码将不会工作,因为它告诉导航控制器内的搜索栏。我看到了下面的问题,但对于斯威夫特没有工作答案:

iOS 11 search bar jumping to top of screen

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 

缺少什么我在这里?

回答

0

试试这个:

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