Swift:以编程方式编码时,搜索栏未显示在 viewController 上

Posted

技术标签:

【中文标题】Swift:以编程方式编码时,搜索栏未显示在 viewController 上【英文标题】:Swift: Search bar not showing up on viewController when coded programmatically 【发布时间】:2020-08-10 19:47:41 【问题描述】:

我正在尝试向我的 viewController 添加一个搜索栏(使用 IBAction 方法),但它没有显示出来。我错过了什么吗?

import UIKit

class SongrequestViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate 



var tableView = UITableView()
var searchBar = UISearchBar()

override func viewDidLoad() 
    super.viewDidLoad()
    view.backgroundColor = .white
    tableView = UITableView(frame: CGRect(x: 10, y: 200, width: 370, height:400))
    tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
    tableView.dataSource = self
    tableView.delegate = self
    self.view.addSubview(tableView)
    
    searchBar = UISearchBar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 50))
    searchBar.searchBarStyle = UISearchBar.Style.prominent
    searchBar.placeholder = "Search for your song here..."
    searchBar.sizeToFit()
    searchBar.isTranslucent = false
    searchBar.delegate = self
    self.view.addSubview(searchBar)

tableView 显示出来了,但搜索栏没有显示出来。

【问题讨论】:

【参考方案1】:

不会在viewDidLoad 中设置视图的框架。所以self.view.frame.size.width 可能不会在viewDidLoad 中返回正确的值。

searchBar = UISearchBar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 50))

尝试在 viewDidAppear 中添加搜索栏。

要检测搜索栏中的文本更改,请在您的SongrequestViewController 中确认UISearchBarDelegate 并实现其委托方法。

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) 
    print("search text: ", searchText)

【讨论】:

谢谢,您知道如何在搜索栏中添加与 IB 操作方法相似或相同的内容吗? 谢谢。不幸的是,它没有用,但无论如何谢谢!我将另一个独立的 XIB 文件添加到我的 viewController 以显示搜索栏。

以上是关于Swift:以编程方式编码时,搜索栏未显示在 viewController 上的主要内容,如果未能解决你的问题,请参考以下文章

导航栏未显示在嵌入导航控制器中

Swift 中的 Xcode:导航栏未显示在 UI 集合视图(模拟器)中

模态视图导航栏未正确显示

Swift 5. 如何在按钮触摸时呈现或显示 ViewController?没有情节提要(以编程方式)

搜索栏未显示在导航栏 iOS 11 上

使用 swift 4 以编程方式注册时未显示自定义单元格