Я настраиваю UITableView с несколькими ячейками. Когда я удерживаю ячейку, появляется меню, и я могу добавить комментарий/текст в свою ячейку. Я хочу, чтобы не отображалось пустое пространство меток комментариев, если пользователь не вставляет комментарий. Но если пользователь вставит комментарий, тогда появится этот ярлык и отобразится весь вставленный комментарий. Возможно ли это сделать без жесткого кода высоты ячейки? Потому что это приложение будет работать на нескольких устройствах, и экран на каждом из них будет разным.
Я уже безуспешно пытался использовать авто-макет, используя эти строки кода в viewDidLoad:
questionsTableView.rowHeight = UITableView.automaticDimension
questionsTableView.estimatedRowHeight = 390
Также я пытался использовать questionsTableView.beginUpdates
до добавления комментария к метке и questionsTableView.endUpdates
после того, как комментарий был назначен метке, но тоже не работает.
Мне не удается отобразить ячейку таким образом, когда пользователь запускает приложение, и если пользователь добавляет какой-либо комментарий, затем расширяет ячейку и отображает метку:
Вот мой код:
class MainVC: UIViewController {
// Interface Links
@IBOutlet weak var questionsTableView: UITableView!
// Properties
var imagePicker: UIImagePickerController!
var firstCommentReceived = ""
var secondCommentReceived = ""
var images = [UIImage]()
override func viewDidLoad() {
super.viewDidLoad()
questionsTableView.rowHeight = UITableView.automaticDimension
questionsTableView.estimatedRowHeight = 390
}
}
extension MainVC: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 2
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! MainCell
cell.delegate = self
cell.configCell()
if !firstCommentReceived.isEmpty{
cell.firstCommentLabel.text = firstCommentReceived
}
if !secondCommentReceived.isEmpty{
cell.secondCommentLabel.text = secondCommentReceived
}
if !images.isEmpty{
cell.selectedImageView.image = images[0]
}
return cell
}
// Set the height of each row from UITableView
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 390 // size of the maximum height of the cell if the user add comments and images. This size should be dynamic not hardcoded.
}
}
Здесь я создал небольшой пример GitHub с моей проблемой: https://github.com/tygruletz/sendDataFromCellToController
Спасибо, если вы это читаете!
Что ж, я просмотрел ваш проект и обнаружил, что у вас проблемы с макетом ^^"
1- Вам нужно установить макет ячейки сверху вниз, и я вижу, что вы пропустили это до последнего элемента в ячейке, который является изображением
2- Вам нужно найти динамические метки, которые вы должны использовать, например, в своем. Это были комментарии 1 и 2, которые имеют приоритет.
3- Наконец я обнаружил, что вы делаете высоту ячейки статической, и в вашем случае она должна быть динамической.
// Установить высоту каждой строки из UITableView
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension // in your app it was 390
}
если вы хотите посмотреть, это редактирование кода проекта
Удачи ;)
И как я могу удалить это пространство, когда приложение работает? imgur.com/DFXYoJ1
хммм, для этого есть много хитростей, например, вы можете контролировать константу высоты для каждого комментария или правильный способ - использовать другие ячейки пера: D
Я установил высоту метки на 24 пикселя, потому что получал предупреждения в консоли. Если я удалю высоту для меток, то это сработает, но у меня много предупреждений. Вот предупреждения: imgur.com/a/G3mVNsV
дайте мне немного времени, я исправлю это для вас и покажу экран для этого
Вы хотите, чтобы это было так, верно? - imgur.com/a/c8zTzDJ - вы можете скачать проект и принять ответ, если он сделан для вас (ufile.io/wz1om)
Удивительно. Я только что узнал, что могу связать ограничения из представления со своим кодом и управлять значением оттуда. Это так здорово! Большое спасибо Ахмед!
<3 Никаких проблем в любое время <3
Просто дайте нижнее ограничение вашего нижнего изображения, как вы видите на скриншоте, и установите высоту для строки с помощью
return UITableView.automaticDimension
//or you can remove this method
И можно ли удалить это пространство, когда у меня ничего нет на этом ярлыке? imgur.com/DFXYoJ1 Я установил высоту метки на 24 пикселя, потому что в консоли появлялись предупреждения. Если я удалю высоту для меток, тогда я работаю, но у меня много предупреждений. Вот предупреждения: imgur.com/ka5mkKR
Я думаю просто оставить их пустыми. Ячейка Tableview автоматически устанавливает высоту
если я не ошибаюсь, ты хочешь этого? drive.google.com/file/d/1cCI7_IEpfFgqvnCKbKOgH4DZKXcXRgNt/…
да. Кроме того, UIImageView не будет, если пользователь не сделает снимок с помощью камеры. Если пользователь добавит комментарий/тег/фото, чтобы показать, что Labels/ImageView.
хорошо. Я только что удалил ваш фиксированный текст с ярлыков. Вам нужно сделать ограничение высоты IBoutlet, а затем установить его на 0. когда пользователь добавит любой комментарий, у вас есть обратный вызов вашего ограничения набора предупреждений с любой высотой, которую вы хотите.
хорошо. Я только что удалил ваш фиксированный текст с ярлыков. Вам нужно сделать ограничение по высоте IBoutlet в вашем классе ячеек, а затем установить его с помощью 0. когда пользователь добавит любой комментарий, который у вас есть, просто перезагрузите табличное представление и проверьте, не является ли переменная строки комментария пустой ограничением набора предупреждений с любой высотой, которую вы хотите.
Создал запрос на включение в ваш репозиторий.