为啥我的 UIView 不显示 UISearchBar

Posted

技术标签:

【中文标题】为啥我的 UIView 不显示 UISearchBar【英文标题】:Why won't my UIView show a UISearchBar为什么我的 UIView 不显示 UISearchBar 【发布时间】:2016-07-28 17:28:36 【问题描述】:

我想在我的故事板中设置一个 UIView 等于我的UISearchControllerUISearchBar 出于某种原因,这段代码:

@IBOutlet weak var theView: UIView!
override func viewDidLoad() 
    super.viewDidLoad()
    let searchController = UISearchController(searchResultsController: nil)
    searchController.dimsBackgroundDuringPresentation = false
    searchController.searchBar.placeholder = "Search here..."
    searchController.searchBar.sizeToFit()
    theView = searchController.searchBar


不会显示搜索栏。但是这个:

@IBOutlet weak var tblSearchResults: UITableView!
override func viewDidLoad() 
    super.viewDidLoad()
    let searchController = UISearchController(searchResultsController: nil)
    searchController.dimsBackgroundDuringPresentation = false
    searchController.searchBar.placeholder = "Search here..."
    searchController.searchBar.sizeToFit()
    tblSearchResults.tableHeaderView = searchController.searchBar

会的。为什么? UITableView 标题视图是 UIView 那么为什么它的行为不同?

【问题讨论】:

你没有在theView上调用addSubview @Shubhank 我必须将其添加为子视图吗?我真的很想将其设置为视图。 【参考方案1】:

不会就您为什么要这样做提供任何建议,但为了帮助解决您的具体问题...

检查...分配后,searchController.searchBar 引用被复制到theView。 searchBar 没有超级视图,所以theView 也没有。然后,您可以将 searchController.searchBartheView 添加回作为子视图,因为它们具有相同的引用。

@IBOutlet weak var theView: UIView!
override func viewDidLoad() 
    super.viewDidLoad()
    let searchController = UISearchController(searchResultsController: nil)
    searchController.dimsBackgroundDuringPresentation = false
    searchController.searchBar.placeholder = "Search here..."
    searchController.searchBar.sizeToFit()
    print("theView0 \(theView.superview)")

    theView = searchController.searchBar
    print("theView1 \(theView.superview)") //notice this is nil now

    view.addSubview(theView) //OR view.addSubview(searchController.searchBar)

    print("theView2 \(theView.superview)")

【讨论】:

以上是关于为啥我的 UIView 不显示 UISearchBar的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 UIView 中没有显示任何内容?

为啥从自定义 UIView 向 UIButton 添加子视图不显示添加的子视图?

为啥这个自定义 UIView 代码不显示 UILabel 的?

Interface Builder:为啥我的 UIView 是透明的?

为啥在 Swift 中使用惰性 var 初始化时添加框架不显示 UIView

当我将 UIView 动画放在不同类的 containerView 中时,为啥我的 UIView 动画不起作用?