给出3个控制器:A,B,C A有一个隐藏的导航栏。通过StoryboardReference调用控制器B. 控制器B在viewDidLoad上显示导航栏。它有一个搜索栏和一个collectionView。查看我的故事板的屏幕截图A.如果单击一个单元格,则调用控制器C.
问题: 如果A调用B,则搜索栏位于导航栏后面(屏幕截图B)。它出现在从C到B的过渡(截图C)。
导航栏已经是半透明的。有什么想法吗?
修改
我意识到我的动画过渡导致了我的问题。
也许您可以发现错误?
nil
答案 0 :(得分:1)
我相信我在我的应用中遇到了一些类似的问题,但由于你无法控制的所有事情而陷入困境。我的解决方案是在导航栏中放置一个搜索图标,然后将搜索控制器向下滑动到导航栏上,使其远离表格/滚动视图。这是我的实现(应该是完整的)
import UIKit
class tvc: UITableViewController, UISearchBarDelegate, UISearchControllerDelegate {
var searchController:UISearchController!
@IBAction func startSearch() {
self.navigationController?.presentViewController(self.searchController, animated: true, completion: {})
}
override func viewDidDisappear(animated: Bool) {
cancelSearch(self)
}
override func viewDidLoad() {
super.viewDidLoad()
searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
searchController.delegate = self
searchController.hidesNavigationBarDuringPresentation = false
searchController.loadViewIfNeeded() /* Fixes bug in iOS http://stackoverflow.com/questions/32675001/uisearchcontroller-warning-attempting-to-load-the-view-of-a-view-controller */
definesPresentationContext = true
tableView.sectionIndexBackgroundColor = UIColor.clearColor()
tableView.sectionIndexTrackingBackgroundColor = UIColor.clearColor()
}
extension tvc: UISearchResultsUpdating {
// MARK: - UISearchResultsUpdating Delegate
func updateSearchResultsForSearchController(searchController: UISearchController) {
filterContentForSearchText(searchController.searchBar.text!)
}
}
func cancelSearch(sender: AnyObject?) {
if sender!.searchController.active == true {
sender?.searchController.resignFirstResponder()
sender!.navigationController!!.dismissViewControllerAnimated(false, completion: {})
sender!.searchController.searchBar.text = ""
sender!.searchController.active = false
}
}
答案 1 :(得分:0)
我认为问题是你要么没有为imageViewSnapshot设置框架,要么设置错误的框架。由于imageViewSnapshot包含搜索栏,因此您必须设置框架,使其位于导航栏后面。或imageViewSnapshot应仅包含fromViewTransitionFromView的可见区域。