У меня есть несколько статических ячеек, и они не хотят изменять свой размер из-за избыточного содержимого в метке. У меня есть все ограничения (top
, bottom
, leading
, tralling
) в каждой ячейке, также у меня есть этот код:
import UIKit
class FilmTableViewController: UITableViewController {
@IBOutlet weak var posterView: UIImageView!
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var yearLabel: UILabel!
@IBOutlet weak var directorLabel: UILabel!
@IBOutlet weak var actorsLabel: UILabel!
@IBOutlet weak var countryLabel: UILabel!
@IBOutlet weak var plotLabel: UILabel!
@IBOutlet weak var RatingLabel: UILabel!
private let networkingService = NetworkingService()
var filmImbdbID = ""
override func viewDidLoad() {
super.viewDidLoad()
loadFilm(filmImbdbID)
}
override func viewDidAppear(_ animated: Bool) {
tableView.rowHeight = UITableView.automaticDimension
tableView.estimatedRowHeight = 80
}
private func loadFilm(_ film: String) {
networkingService.fetchFilmRecording(matching: film) { [weak self] response in
guard let `self` = self else {
return
}
self.directorLabel.text = response.recordings?.director
self.titleLabel.text = response.recordings?.title
self.yearLabel.text = response.recordings?.year
self.actorsLabel.text = response.recordings?.actors
self.countryLabel.text = response.recordings?.country
self.plotLabel.text = response.recordings?.plot
self.RatingLabel.text = response.recordings?.rating
if let imageUrl = URL(string: response.recordings!.poster) {
guard let data = try? Data(contentsOf: imageUrl) else { return }
let image = UIImage(data: data)
self.posterView.image = image
}
}
}
}
Также число линий равно 0.
Когда я вижу этот вид, он не работает, однако, если я сдвинусь вниз, он будет выглядеть так:
Пожалуйста, какие-нибудь идеи, чтобы исправить это? :(
Пробовали ли вы не использовать методы height
-делегата?
Я имею в виду избыточный вес. Label.text не помещается в ячейку. Вы можете увидеть это на картинке (актеры). Также я пробовал использовать только свойства или только методы, но все то же самое.
Попробуйте установить numberOfLines
из label
на 0.
О, забыл, я обновлю это в своем вопросе. Раньше я устанавливал numberOfLines с помощью атрибута Inspector.
Вам нужно обновить свой код, потому что неясно, что происходит.
В любом случае вы должны использовать или:
tableView.rowHeight = UITableView.automaticDimension
tableView.estimatedRowHeight = 80
или делегировать методы
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableView.automaticDimension
}
func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableView.automaticDimension
}
не оба
если не ошибаюсь, я уже пробовал, но результат тот же :( Хотя работает, если скользить вниз, например, в нижней части изображения. Но не после метода didLoad. Возможно, это проблема с таким методом, как tableView.reloadData()?
Вы можете обновить свой пост с кодом настройки источника данных?
Таким образом, похоже, что вы не хотите неограниченного автоматического изменения размера, поэтому либо не используйте .automaticDimension
, либо добавьте ограничение максимальной высоты к меткам.
ограничение метки для высоты равно greaterThanOrEqualTo
?
У меня нет методов dataSource и Delegation для этого tableVC. Я обновил свой пост, добавив весь код из tableVC.
Я передал filmID из другого VC, затем получил данные json и обновил свои метки. Это не сработало, если я использовал оцениваемыйRowHeight. И я не могу использовать фиксированный размер ячейки, потому что «Сюжет» и «Актеры» могут быть разными для каждого фильма. Просто обратите внимание: если я использую reloadData() в viewDidAppear, иногда это работает, но если у приложения не было времени для получения json, автоматическое изменение размера не происходит.
Итак, я провел рефакторинг своего кода и изменил способ заполнения ячеек динамическим прототипом вместо статического, после чего все заработало. Может быть, это не работает со статическим?
@MichaelSidoruk добавьте блок завершения в свой вызов json и вставьте туда reloadData()
@ Аластар, да, спасибо. Я сделал это с динамическими ячейками (теперь это лучше для меня), и это работает. Прохладный. Я бы хотел поставить тебе плюс, но не могу из-за репутации :(. Когда репутация будет 15, я поставлю тебе плюс :)
Что не работает на самом деле? А что такое избыточный контент?