展开 segue 后,swift 2 搜索栏不会隐藏
Posted
技术标签:
【中文标题】展开 segue 后,swift 2 搜索栏不会隐藏【英文标题】:swift 2 search bar will be not hidden after unwind segue 【发布时间】:2016-04-12 06:12:18 【问题描述】:在我的 swift 2 应用程序中,我有一个带有搜索栏的表格视图控制器。 我在 viewDidLoad 中设置了搜索栏。在 viewWillAppear 中我设置了我的 tableView 的偏移量,因为我想在开始时隐藏搜索栏。这很有效。
但如果我切换到另一个视图控制器并返回 TableViewController 并退出展开 segue,搜索栏将直接可见。
如果我从另一个视图控制器返回我的 TableViewController 并使用正常的模态 segue(不展开),搜索栏将被隐藏,因为 tableview.setContentOffset 将处于活动状态。
任何想法我做错了什么?
class TableViewController: UITableViewController, ADBannerViewDelegate, UISearchBarDelegate, UISearchResultsUpdating
let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
var items = [CoreData_ITEMS]()
func updateSearchResultsForSearchController(searchController: UISearchController)
func DatenAbrufen()
let fetchRequest = NSFetchRequest(entityName: "ITEMS")
do
try self.items = self.managedObjectContext!.executeFetchRequest(fetchRequest) as! [CoreData_ITEMS]
catch
self.tableView.reloadData()
/*************** VIEW DID LOAD ***************/
override func viewDidLoad()
super.viewDidLoad()
let searchController = UISearchController(searchResultsController: nil)
searchController.searchBar.delegate = self
searchController.searchResultsUpdater = self
searchController.hidesNavigationBarDuringPresentation = false
searchController.dimsBackgroundDuringPresentation = false
tableView.tableHeaderView = searchController.searchBar
override func viewWillAppear(animated: Bool)
DatenAbrufen()
tableView.contentOffset = CGPointMake(0,44)
/*************** ANZAHL DER ZELLEN ERMITTELN ***************/
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return items.count
/*************** ZELLEN MIT INHALT FÜLLEN ***************/
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = self.tableView.dequeueReusableCellWithIdentifier("Cell") as! ModifyCells
var ITEM:CoreData_ITEMS
ITEM = items[indexPath.row]
cell.Name.text = ITEM.name
return cell
/*************** EXIT FUNKTIONEN ***************/
@IBAction func exit_to_TViewController(segue: UIStoryboardSegue)
【问题讨论】:
【参考方案1】:我遇到了类似的问题。问题是 tableView.contentOffset
不会被设置,除非 tableview 显示在屏幕上。我不知道为什么它有这种行为。所以为我解决的问题是将tableView.contentOffset
调用移动到vieDidAppear
,但随后滚动有点可见。这对我来说不是问题。如果您不希望这样,可以尝试将呼叫转移到 viewDidLayoutSubviews
。
【讨论】:
我将此调用放入viewDidAppear
=> 与帖子 1 相同的结果。我将此调用放入 viewDidLayoutSubviews
=> Serch Bar 现在一直隐藏。但现在我无法向下滚动表格视图以显示搜索栏...
也可以尝试使用tableView.setContentOffset(CGPoint(x: 0, y: 44), animated: false)
而不是tableView.contentOffset =
好的,如果我在第一次启动时将其放入viewDidLayoutSubviews
,我会看到表格将如何向下滚动并且搜索栏将被隐藏。但如果向上滚动(以显示搜索栏),表格将再次自动向下滚动 - 每次。在didappear
中,我遇到了与帖子 1 相同的问题
嗯,它应该在didAppear
上工作,确保你在设置内容偏移后不要调用reloadData
,它也可能与它有关。
我还发现了这篇文章:***.com/a/34008038/1949494。如果您直接将 unwind segue 连接到按钮,这也可能会导致问题。以上是关于展开 segue 后,swift 2 搜索栏不会隐藏的主要内容,如果未能解决你的问题,请参考以下文章
打印可变展开 Segue - Xcode 8.0 Swift 3.0
执行 push segue 后,当给搜索栏焦点时,导航栏隐藏