#ios #swift #uitableview #resize #height
#iOS #swift #uitableview #изменение размера #высота
Вопрос:
Я хочу создать что-то вроде автозаполнения textview в Android, что означает tableview в виде наложения для отображения результата поиска. Для этого я создал представление (необходимое для отображения определенного фона), содержащее табличное представление. Это работает нормально, но когда tableview имеет только 1 строку, tableview не изменяет свою высоту.
Я пишу
tableView.tableFooterView = UIView()
но это просто подавляет избыток разделителя, а не изменяет высоту.
Не могли бы вы мне помочь, пожалуйста?
Комментарии:
1. Покажите мне свой экран
Ответ №1:
Вы должны обновить фрейм TableView вручную. Если вы используете автозапуск, добавьте IBOutlet для высоты табличного представления:
@IBOutlet weak var heightConstraint: NSLayoutConstraint!
Я предполагаю, что высота TableView ограничена некоторым фиксированным значением. Если это зависит от высоты экрана, просто замените maxTableViewHeight
на вычисляемую переменную.
let maxTableViewHeight = CGFloat(300)
Создайте метод для обновления высоты TableView. Это гарантирует, что TableView будет изменен, если его высота содержимого меньше maxHeight:
func updateTableViewFrame() {
autocompleteTableView.layoutIfNeeded() //to make sure you have updated contentSize
let height = autocompleteTableView.contentSize.height
heightConstraint.constant = min(height, maxTableViewHeight)
view.layoutIfNeeded()
}
Теперь все, что вам нужно сделать, это вызывать этот метод всякий раз, когда ваш источник данных обновляется. В вашем случае это должно быть измененное значение ввода пользователя.
Комментарии:
1. Спасибо за ваш ответ. Я уже нашел похожий, но он на самом деле не работает, проблема заключалась в том, чтобы определить реальный размер tableview после перезагрузки.
2. В любом случае, я изменил способ выполнения и полностью подавил «автозаполнение текстового представления»