2017-09-26 80 views
2

有2个未回复的帖子herehere,其中没有人提供了解决此问题的工作方案。iOS 11在tableViewHeader中的搜索栏跳转到焦点上的屏幕顶部

第一张图显示了搜索控制器的iOS 10行为,您可以在其中看到左侧的层次结构,右侧的搜索控制器框架以红色框起。在中心以蓝色显示的是在表格中正确显示的。 This is iOS 10 behaviour of search controller

第二个图像显示的iOS 11行为,其中搜索控制器退出tableView标题的边界内,并移动到不具有意义的屏幕的顶部,因为表视图被从屏幕的顶部定位在230个像素。 This is iOS 11 behaviour

我用于显示所有的这种代码是下面的(在viewDidLoad):

self.definesPresentationContext = YES; 
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; 
self.searchController.searchResultsUpdater = self; 
self.searchController.dimsBackgroundDuringPresentation = NO; 
self.searchController.searchBar.delegate = self; 
self.searchController.searchBar.clipsToBounds = YES; 
self.tableView.tableHeaderView = self.searchController.searchBar; 
self.searchController.searchBar.placeholder = @"Enter name or email"; 
[self.searchController.searchBar sizeToFit]; 

回答

3

由于iOS11,搜索控制是导航栏的一部分。你需要像下面

Objective-C的 if (@available(iOS 11.0, *)) { self.navigationItem.searchController = searchController } else { self.tableView.tableHeaderView = searchController.searchBar }

斯威夫特

if #available(iOS 11.0, *) { 
+0

而他们完全放弃支持用于搜索栏的tableView标题部分?我发现它能够像预期的那样聚焦。任何有关此文档的参考文献都证明了这一说法? – Aleksandar

+0

这并不是说标题视图已从表格中删除,但现在应该在导航项目中执行搜索。请参阅此WWDC对话[更新您的iOS 11应用程序](https://developer.apple.com/videos/play/wwdc2017/204/)幻灯片第23页。 – zcui93

+1

这是Apple推荐的内容,但并不总是有效:[iOS11 UISearchBar在嵌入UISplitViewController时在UINavigationBar中丢失](https://stackoverflow.com/questions/46387166/ios11-uisearchbar-missing-in-uinavigationbar-when-embedded-in-uisplitviewcontrol)。你仍然可以使用tableHeaderView,但不是没有一些调整... [在iOS11的tableHeaderView中使用UISearchController与UISearchBar](https://stackoverflow.com/questions/46737117/using-uisearchcontroller-with-uisearchbar-in-tableheaderview-in -ios11) –

0

下面是从故事板视图控制器的tableView的约束东西。

var tableConstraints: [NSLayoutConstraint] { 
      var constraints = [NSLayoutConstraint]() 
      constraints.append(NSLayoutConstraint(item: self.tableViewMyMedia, attribute: .left, relatedBy: .equal, 
                toItem: self.view, attribute: .left, multiplier: 1.0, constant: 1.0)) 
      constraints.append(NSLayoutConstraint(item: self.tableViewMyMedia, attribute: .right, relatedBy: .equal, 
                toItem: self.view, attribute: .right, multiplier: 1.0, constant: 1.0)) 
      constraints.append(NSLayoutConstraint(item: self.tableViewMyMedia, attribute: .top, relatedBy: .equal, 
                toItem: self.view, attribute: .top, multiplier: 1.0, constant: 1.0)) 
      constraints.append(NSLayoutConstraint(item: self.tableViewMyMedia, attribute: .bottom, relatedBy: .equal, 
                toItem: self.view, attribute: .bottom, multiplier: 1.0, constant: 1.0)) 
      return constraints 
     } 

现在添加搜索栏,并添加此限制这样

let search = UISearchController(searchResultsController: nil) 
      search.searchResultsUpdater = self 
      self.navigationItem.searchController = search 
      NSLayoutConstraint.activate(tableConstraints) // important 

并检查,它不是跳跃时上下滚动。

相关问题