У меня есть textField сверху моего представления и tableView, который должен быть помещен ниже textField.
Так что мой код для их добавления выглядит следующим образом:
private func setupSearchBar() {
searchtextField = UITextField()
mapView.addSubview(searchtextField)
searchtextField.translatesAutoresizingMaskIntoConstraints = false
let constraints = [
NSLayoutConstraint(item: searchtextField, attribute: .leading, relatedBy: .equal, toItem: mapView.safeAreaLayoutGuide, attribute: .leading, multiplier: 1.0, constant: 16.0),
NSLayoutConstraint(item: searchtextField, attribute: .trailing, relatedBy: .equal, toItem: mapView.safeAreaLayoutGuide, attribute: .trailing, multiplier: 1.0, constant: -16.0),
NSLayoutConstraint(item: searchtextField, attribute: .top, relatedBy: .equal, toItem: mapView.safeAreaLayoutGuide, attribute: .top, multiplier: 1.0, constant: 24.0),
NSLayoutConstraint(item: searchtextField, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 46.0)
]
NSLayoutConstraint.activate(constraints)
}
после этогоЯ настраиваю свой tableView:
private func setupResultsTableView() {
tableView = UITableView()
mapView.addSubview(tableView)
tableView.translatesAutoresizingMaskIntoConstraints = false
tableViewHeightAnchor = tableView.heightAnchor.constraint(equalToConstant: 0)
let constraints = [
tableView.safeAreaLayoutGuide.topAnchor.constraint(equalTo: searchtextField.safeAreaLayoutGuide.bottomAnchor),
tableView.safeAreaLayoutGuide.leadingAnchor.constraint(equalTo: mapView.safeAreaLayoutGuide.leadingAnchor),
tableView.safeAreaLayoutGuide.trailingAnchor.constraint(equalTo: mapView.trailingAnchor),
tableViewHeightAnchor!,
tableView.safeAreaLayoutGuide.bottomAnchor.constraint(lessThanOrEqualToSystemSpacingBelow: view.safeAreaLayoutGuide.bottomAnchor, multiplier: 1.0)
]
NSLayoutConstraint.activate(constraints)
}
Что я хочу сделать, это: 1. Установить для tableView высоту 0 2. Когда пользователь начинает вводить мое textField, в соответствии с результатами поискаотобразить tablView и установить его высоту равным contentSize таблицы.Таким образом, максимальный размер будет привязан к нижней части устройства, и если отображаются 1-2 результата, то для уменьшения размера tableView.
Когда пользователь начинает печатать, я запускаю следующее:
func textFieldDidBeginEditing(_ textField: UITextField) {
filterContentForSearchText(textField.text!)
tableView.reloadData()
UIView.animate(withDuration: 0.6) {
self.tableView.layoutIfNeeded()
if textField.isEditing {
self.tableViewHeightAnchor.constant = self.tableView.contentSize.height
} else {
self.tableViewHeightAnchor.constant = 0.0
}
}
}
Но что-то не так в моем коде, потому что я получаю такие уродливые результаты: когда я начинаю смахивать, tableView начинает подниматься и перебирает мое textField
и когда я заканчиваю прокрутку, она останавливается в середине вида
Есть ли способ исправить эту проблему?Если у вас есть какие-либо вопросы, пожалуйста, спросите меня