2016-09-09 1 views
1

Я использую автомасштабирование, чтобы получить высоту строк в UITableView, как описано here. Эта часть работает.Вертикальная неоднозначность сжатия в макете размера UITableView строк

укладывают некоторые ярлыки, чтобы они выглядели, как это в Interface Builder:

enter image description here

Ограничение, что вы ожидали бы, V:|-lab1-lab2-lab3-|. Проблема в том, что она думает, что это неоднозначно и требует от вас изменения приоритетов вертикального содержания.

Не должно быть двусмысленным. Этикетки должны определять высоту строки. Но IB, похоже, занимает высоту строки, которую вы можете перетащить в любое место в IB, как что-то, что будет сдерживать метки, когда на самом деле во время выполнения намерение заключается в том, чтобы содержимое ярлыка определяло высоту строки , На этом изображении высота строки немного больше, чем должна быть во время выполнения, поэтому зеленая метка становится удаленной от ее текстового содержимого, и IB начинает спрашивать о приоритетах, связанных с обложением содержимого. Обычно я разрешаю эту проблему, нажимая «Обновить фреймы», которая будет тянуть высоту строки до высоты ярлыков, но «Обновить кадры» не влияет на высоту строки в UITableView.

Есть ли стандартный способ решить эту проблему? Я бы подумал, что люди все время нажимают на это, если они используют автоматическую компоновку для высоты строк.

ответ

0

Проблема заключается в том, что ваши ограничения не указывают какого-либо явного значения для каждой метки, и кажется, что высота вашей ячейки фиксирована до некоторого значения.

Прежде всего, необходимо, чтобы табличное использовать UITableViewAutomaticDimension в методе heightForRowAtIndexPath

как это в Obj-C:

-(CGFloat) tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath { 

    return UITableViewAutomaticDimension; 
} 

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return UITableViewAutomaticDimension; 
} 

Тогда вам нужно исправить высоту этикеток:

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

В вашем случае, кажется, что вы хотите, чтобы каждый ярлык, чтобы иметь одинаковую высоту, так первое решение должно работать;)

+0

Я знаю о 'UITableViewAutomaticDimension' и этой части. Изображение происходит от Interface Builder, а не от пользовательского интерфейса во время выполнения.Мне не нужно указывать явные высоты для меток, потому что они берут свою высоту из своего текста, а сумма должна давать динамическую высоту строки. –

+0

Я добавил еще несколько подробностей и объяснений на мой вопрос. Мне трудно объяснить эту проблему. –

+0

Эй, Роб Н, на самом деле, когда я сказал «исправить высоту», я не имею в виду явную высоту. Я имел в виду, что вы должны установить высоту первой метки равной второй, равной третьей. Это исправит их высоты во время выполнения, и вы закончите с макетом, который, как я думаю, вы ожидаете (все метки с одинаковой высотой) – RomOne

0

Я нашел решение, которое сработало для меня. Мне жаль, что следующее объяснение ручное, но это лучше, чем я могу сделать сам. Здесь обращается здесь (https://useyourloaf.com/blog/table-view-cells-with-varying-row-heights/) в разделе Автоматическая компоновка прототипа Cell.

Автомат не знает, что мы будем корректировать размер содержимого, чтобы обе эти метки соответствовали. Поэтому он ожидает намека на то, какая метка должна расширяться или сжиматься сначала, чтобы соответствовать пространству. Чтобы удалить предупреждение, уменьшите сопротивление вертикальному сжатию и увеличьте приоритет вертикального обнимания на метке номера строки, чтобы он оставался на своем внутреннем уровне.

Смежные вопросы