Выравнивание UITableView с UITextView - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь выровнять UITableView по размеру абзацев по высоте в UITextView. Пример: Временные метки слева - это то, что я пытаюсь сделать.Я изменил свой код, чтобы использовать UIView вместо TVcells, чтобы увидеть, что было не так, и вы можете видеть, что оранжевый вид перекрывает голубой, что означает, что на самом деле представления не совпадают, а перекрываются. ПРИМЕЧАНИЕ. Я хочу использовать TableView, а не UIView enter image description here У меня возникли проблемы с пониманием того, как рассчитывается высота текста в iOS.Я использую приведенный ниже код, чтобы получить высоту каждого paragraph:

 let liveParagraphView = textView.selectionRects(for: txtRange).reduce(CGRect.null) { $0.union($1.rect) }

После этого я вычисляю высоту каждого из них и затем подаю его в мой UITableView heightForRowAt

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        let models = getParagraphModel()

        let height = models[indexPath.row].height
        let finalHeight = models[indexPath.row].height

        let heightValue = finalHeight
        return CGFloat(heightValue);
    }

Каждая строка имеет разные значения высоты, но даже при использовании этих значений она не выравнивается.Кажется, проблема в том, что каждая строка вычисляет позицию Y, которая не находится непосредственно под линией перед ней.Это НА ВЕРХЕ !! В результате UITableView не выравнивается при добавлении новых ячеек, и это «наложение» selectionRects не учитывается.Я прав?Как я мог добиться этого?

1 Ответ

2 голосов
/ 26 июня 2019

Swift 5

Сначала вы должны установить динамическую высоту вашего textView (которая находится в ячейке):

textView.translatesAutoresizingMaskIntoConstraints = true
textView.sizeToFit()
textView.isScrollEnabled = false

Затем вычислите количество строк вашего textView вtextDidChange и т. Д. Для обновления макета tableView.

let numOfLines = (yourTextView.contentSize.height / yourTextView.font.lineHeight) as? Int

Когда текст textView на одну строку ниже, вы должны обновить макет tableView:

tableView.beginUpdates()
tableView.endUpdates()

И тогда вам следуетустановите intrinsicContentSize ячейки tableView для динамического rowHeight:

  • Установите макет вашей ячейки (которая содержит textView) без статической высоты,

  • Установите вашrowHeight и estimatedRowHeight tableView:

    tableView.rowHeight = UITableView.automaticDimension
    tableView.estimatedRowHeight = 44 // whatever you want
    

Итак, теперь у вас есть ячейка tableView с dynamicHeight

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...