Автоматическое изменение размера статической ячейки по метке избыточного веса

У меня есть несколько статических ячеек, и они не хотят изменять свой размер из-за избыточного содержимого в метке. У меня есть все ограничения (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.

Когда я вижу этот вид, он не работает, однако, если я сдвинусь вниз, он будет выглядеть так:

Пожалуйста, какие-нибудь идеи, чтобы исправить это? :(

Что не работает на самом деле? А что такое избыточный контент?

PGDev 22.05.2019 15:23

Пробовали ли вы не использовать методы height-делегата?

Daniyar 22.05.2019 15:27

Я имею в виду избыточный вес. Label.text не помещается в ячейку. Вы можете увидеть это на картинке (актеры). Также я пробовал использовать только свойства или только методы, но все то же самое.

Michael Sidoruk 22.05.2019 15:48

Попробуйте установить numberOfLines из label на 0.

PGDev 22.05.2019 15:52

О, забыл, я обновлю это в своем вопросе. Раньше я устанавливал numberOfLines с помощью атрибута Inspector.

Michael Sidoruk 22.05.2019 15:55
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
5
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно обновить свой код, потому что неясно, что происходит.

В любом случае вы должны использовать или:

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()?

Michael Sidoruk 22.05.2019 15:53

Вы можете обновить свой пост с кодом настройки источника данных?

Alastar 22.05.2019 15:54

Таким образом, похоже, что вы не хотите неограниченного автоматического изменения размера, поэтому либо не используйте .automaticDimension, либо добавьте ограничение максимальной высоты к меткам.

NRitH 22.05.2019 16:15

ограничение метки для высоты равно greaterThanOrEqualTo?

Alastar 22.05.2019 16:16

У меня нет методов dataSource и Delegation для этого tableVC. Я обновил свой пост, добавив весь код из tableVC.

Michael Sidoruk 22.05.2019 23:28

Я передал filmID из другого VC, затем получил данные json и обновил свои метки. Это не сработало, если я использовал оцениваемыйRowHeight. И я не могу использовать фиксированный размер ячейки, потому что «Сюжет» и «Актеры» могут быть разными для каждого фильма. Просто обратите внимание: если я использую reloadData() в viewDidAppear, иногда это работает, но если у приложения не было времени для получения json, автоматическое изменение размера не происходит.

Michael Sidoruk 22.05.2019 23:36

Итак, я провел рефакторинг своего кода и изменил способ заполнения ячеек динамическим прототипом вместо статического, после чего все заработало. Может быть, это не работает со статическим?

Michael Sidoruk 25.05.2019 17:04

@MichaelSidoruk добавьте блок завершения в свой вызов json и вставьте туда reloadData()

Alastar 27.05.2019 08:51

@ Аластар, да, спасибо. Я сделал это с динамическими ячейками (теперь это лучше для меня), и это работает. Прохладный. Я бы хотел поставить тебе плюс, но не могу из-за репутации :(. Когда репутация будет 15, я поставлю тебе плюс :)

Michael Sidoruk 27.05.2019 12:47

Другие вопросы по теме