TableView вычисляет неверную высоту для динамической ширины и метки высоты - PullRequest
0 голосов
/ 31 декабря 2018

Я читал об этом в нескольких темах, но пока не нашел решения.

Я создаю приложение, похожее на чат


Приложение имеет TableView с ячейками динамической высоты .

Ячейка состоит из view и многострочной метки .

Если метка содержит больше символов, чем > 250 , она сокращается до конца "... подробнее"


Сейчаспроблема в том, что иногда метка обрезается.

Я немного поиграл с настройкой метки Line Break, а после изменения на перенос символов метка показывает полный текст.

Изображение слева : Character Wrap - - - Изображение справа: Word Wrap (мне это нужно)

enter image description here Как вы видите на правом рисунке, «Bt ... See More» обрезается ..


Я понял, что если я установлю ширина метки или ширина представления до фиксированнойразмер, то проблема решается: так что, возможно, корень проблемы находится в ведущем ограничении представления пузыря:

Align leading to Superview
Constant: 0
Priority: 1000
Multiplier: 0.25

(это необходимо, чтобы представление пузыря расширялось максимально до 75% суперпредставления)

Я сделал для этого репозиторий GitHub:

https://github.com/krptia/chatBubbleTest

Помогите пожалуйста!


Кто-нибудь?

1 Ответ

0 голосов
/ 31 декабря 2018

РЕШЕНИЕ

Я понял, что если я установлю ведущую константу представления в виде пузырьков, то:

Align leading to Superview
Constant: 0
Priority: 1000
Multiplier: 0.25

Чтобы установить максимальную ширину 75%, этикетка внутри будет неправильно обернута.

SO Я удаляю ведущее ограничение, и вместо этого я максимизирую ширину с помощью соотношения сторон!

Если я использую Соотношение сторон 2: 3

Тогда я добиваюсь того же результата, но с наклейкой на этикетку правильно !!

Yay

РЕШЕНИЕ2.0

Хорошо, теперь я выяснил, что второй элемент основного ограничения представления пузыря (SuperView.Trailing) был Относительно маржи

После снятия отметки проблема получаетисправлено, поэтому мне не нужно использовать соотношение сторон!Yay

НО ОБРАТИТЕ ВНИМАНИЕ

Поскольку использование Line Break: Word Wrap также вызывает некоторые проблемы.

Иногда он пытается разбить текст на новую строку (минимум 2 слова), но еслиячейка была повторно использована, тогда приложение могло вычислить неправильную высоту для вида.


Первое изображение : Word Wrap - - - - - - - Второе изображение : Clip

enter image description here

Возможно, эту проблему можно исправить с помощью layoutIfNeeded () или я не знаю.Клип отлично подходит для меня

ОБНОВЛЕНИЕ (2019.03.27)

Хмм .. Я понял, что проблема все еще возникает ... Я не понимаю, почему.

Все ещепытаясь понять это ..

...