添加 UISearchController 后 UITableView 可以滚动到顶部太远
Posted
技术标签:
【中文标题】添加 UISearchController 后 UITableView 可以滚动到顶部太远【英文标题】:UITableView can be scrolled too far top after adding UISearchController 【发布时间】:2018-04-14 08:13:05 【问题描述】:在我使用下面的代码将UISearchController
添加到UITableView
之后。
lazy var searchCardController: SearchCardController =
return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SearchCard") as? SearchCardController
()!
lazy var searchController: UISearchController =
return UISearchController(searchResultsController: searchCardController)
()
//Core Data
lazy var stack: CoreDataStack =
let delegate = UIApplication.shared.delegate as! AppDelegate
return delegate.stack
()
lazy var dataSource: CardCategoryDataSource =
// Create a fetchrequest
let fr = NSFetchRequest<NSFetchRequestResult>(entityName: "CD_CardCategory")
fr.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]
// Create the FetchedResultsController
fetchedResultsController = NSFetchedResultsController(fetchRequest: fr, managedObjectContext: stack.context, sectionNameKeyPath: nil, cacheName: nil)
return CardCategoryDataSource(fetchedResultsController: fetchedResultsController!)
()
override func viewDidLoad()
super.viewDidLoad()
tableView.dataSource = dataSource
setupSearchBar()
func setupSearchBar()
searchController.searchBar.delegate = searchCardController
searchController.searchResultsUpdater = searchCardController
searchController.dimsBackgroundDuringPresentation = true
searchController.searchBar.barTintColor = UIColor.black
searchController.searchBar.tintColor = UIColor.white
searchCardController.searchController = searchController
definesPresentationContext = true
self.tableView.tableHeaderView = searchController.searchBar
UITableView
可以滚动到顶部,这有点奇怪,如下面的屏幕截图所示。
假设表格视图的行为应该像下面的屏幕截图。
非常感谢任何帮助。
更新: 添加了 GIF 以更好地解释问题。
【问题讨论】:
您需要添加一个与搜索栏高度相等的表格视图标题。 @slickdaddy 我尝试按照您的建议更改表格视图标题,但问题仍然存在。奇怪的是,每次我点击搜索栏并点击取消搜索栏按钮时,问题都会自行修复。 我在 ios11 上遇到过类似的。我将单元格高度的计算移至委托 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath),并在 viewDidLoad 中设置:self.tableView.estimatedRowHeight = 0, self.tableView.estimatedSectionHeaderHeight = 0, self. tableView.estimatedSectionFooterHeight = 0. @Harman 添加 self.tableView.estimatedRowHeight = 150 后问题已解决。感谢您给我的想法! :) 【参考方案1】:在我将estimatedRowHeight
定义为我想要的确切行高后问题得到解决,如下图viewDidLoad
所示。
self.tableView.estimatedRowHeight = 150
特别感谢@Harman 给了我这个想法。
【讨论】:
以上是关于添加 UISearchController 后 UITableView 可以滚动到顶部太远的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中更改 UISearchController 的位置
iOS UISearchController:等到 UISearchController 在取消搜索后被解除