展开 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

展开 Segue 导致清晰的导航栏

执行 push segue 后,当给搜索栏焦点时,导航栏隐藏

(Swift)当多个视图控制器导致相同的视图时展开 segue?

在两个视图控制器之间展开 Segue 来回 Swift

Swift 致命错误:在 segue 上展开 Optional 值时意外发现 nil