heightForRowAtIndexPath для более длинного NSStrings

Вы также могли бы хотеть смотреть на libtap, среда тестирования C, которая производит Тест что-либо протокол (TAP) и таким образом интегрируется хорошо со множеством инструментов, выступающих в поддержку этой технологии. Это главным образом используется в динамическом мире языка, но это просто в использовании и становящееся очень популярный.

пример:

#include 

int main () {
    plan(5);

    ok(3 == 3);
    is("fnord", "eek", "two different strings not that way?");
    ok(3 <= 8732, "%d <= %d", 3, 8732);
    like("fnord", "f(yes|no)r*[a-f]$");
    cmp_ok(3, ">=", 10);

    done_testing();
}

7
задан runmad 21 July 2009 в 18:44
поделиться

3 ответа

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

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath {
AppAppDelegate *appDelegate = (AppAppDelegate *)[[UIApplication sharedApplication] delegate];
NSString *Text = ([[appDelegate.myTextSectionsDelegateDict objectAtIndex:indexPath.section] objectForKey:@"Text"]);

    UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:17.0];
    CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
    CGSize labelSize = [Text sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
    return labelSize.height + 15;}
9
ответ дан 6 December 2019 в 14:07
поделиться

Используете ли вы при создании ячейки тот же шрифт, что и для измерения?

Я использовал руководство на этой странице , и все работало для мне. Вам тоже может пригодиться:

2
ответ дан 6 December 2019 в 14:07
поделиться

Похоже, вы поняли, что использовали неправильный размер текста. Вы можете просто использовать свойства метки font и lineBreakMode , чтобы избежать этой проблемы в будущем, особенно если вы измените их в ячейке позже. Кроме того, для удобства чтения я бы не прибавлял высоту перед возвратом числа. Вместо этого я бы попробовал что-то вроде этого:

CGSize textSize = CGSizeMake( 300.0, 1979 );
CGSize size = [ myTextString1 sizeWithFont:[[ cell textLabel ] font ]
                         constrainedToSize:textSize
                             lineBreakMode:[[ cell textLabel ] lineBreakMode ]];

result = MAX( size.height + 30, 44.0f );

Я использовал 1979, потому что, согласно документации, нельзя возвращать значения больше 2009 года.

2
ответ дан 6 December 2019 в 14:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: