为啥我的 UIView 不显示 UISearchBar
Posted
技术标签:
【中文标题】为啥我的 UIView 不显示 UISearchBar【英文标题】:Why won't my UIView show a UISearchBar为什么我的 UIView 不显示 UISearchBar 【发布时间】:2016-07-28 17:28:36 【问题描述】:我想在我的故事板中设置一个 UIView 等于我的UISearchController
的UISearchBar
出于某种原因,这段代码:
@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.searchBar
或 theView
添加回作为子视图,因为它们具有相同的引用。
@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 向 UIButton 添加子视图不显示添加的子视图?
为啥这个自定义 UIView 代码不显示 UILabel 的?
Interface Builder:为啥我的 UIView 是透明的?