У меня был этот код в UITableViewController, и он отлично работал.
func setupSearchBar() {
let searchBar: UISearchBar = searchController.searchBar
tableView.tableHeaderView = searchBar
let point = CGPoint(x: 0, y: searchBar.frame.size.height)
tableView.setContentOffset(point, animated: true
}
Теперь я реорганизую свой код, чтобы он больше соответствовал архитектуре стиля MVC.Я создал UITableView в классе View:
class View: UIView {
lazy var tableView: UITableView = {
let table = UITableView()
table.translatesAutoresizingMaskIntoConstraints = false
return table
}()
func configureView() {
// tableView
addSubview(tableView)
tableView.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true
tableView.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true
tableView.widthAnchor.constraint(equalTo: widthAnchor).isActive = true
tableView.heightAnchor.constraint(equalTo: heightAnchor).isActive = true
}
}
, а затем использовал класс View в моем ViewController:
class ViewController: UIViewController {
var newView: View! { return self.view as! View }
override func loadView() {
view = View(frame: UIScreen.main.bounds)
newView.configureView()
}
override func viewDidLoad() {
super.viewDidLoad()
setupSearchBar()
}
func setupSearchBar() {
let searchBar: UISearchBar = searchController.searchBar
newView.tableView.tableHeaderView = searchBar
let point = CGPoint(x: 0, y: searchBar.frame.size.height)
newView.tableView.setContentOffset(point, animated: true)
}
TableView не показывает никаких проблем, а все остальноехорошо.Единственное, что не работает, это то, что вызывается setContentOffset, но это не компенсирует содержимое.Я хочу, чтобы панель поиска была скрыта по умолчанию, когда пользователь впервые открывает этот viewController (аналог iMessage), но после того, как я переместил код из UITableViewController в отдельные файлы (UIView + UIViewController), как в этом примере, панель поиска всегда отображается по умолчанию.
Я не уверен, почему это не работает.Любая помощь будет принята с благодарностью.