UITableViewCell динамическая высота: / - PullRequest
2 голосов
/ 02 сентября 2011

Hee all,

Я создал UITableViewCell с файлом NIB.В нем есть 1 ярлык, который будет содержать твит.Так что это должна быть динамическая высота.Также есть метка timeAgo, которая должна помещаться под меткой твита.

Я пытаюсь что-то с кадрами и размерами, но не могу найти идеальное решение ... Я делаю это в файле UITableViewCell вМетод drawrect.

self.tweet.lineBreakMode = UILineBreakModeWordWrap;
self.tweet.numberOfLines = 0;
self.tweet.font = [UIFont fontWithName:@"Arial" size:13.0f];
[self.tweet sizeToFit];  

CGFloat tweetHeight = self.tweet.frame.size.height;

self.timeAgo.lineBreakMode = UILineBreakModeWordWrap;
self.timeAgo.numberOfLines = 0;
self.timeAgo.font = [UIFont fontWithName:@"Arial" size:11.0f];
[self.timeAgo sizeToFit];

CGFloat timeAgoHeight = self.timeAgo.frame.size.height;

self.timeAgo.frame = CGRectMake(88, tweetHeight, 100, timeAgoHeight + 10.0f);

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

:

- (CGFloat)RAD_textHeightForSystemFontOfSize:(CGFloat)size {

Мои методы HeightForRow также уже отличаются, потому чтоя использую разные стили ячеекНа данный момент я возвращаю жесткое значение для каждого стиля ячейки, но оно также должно измениться до высоты ячейки.

Надеюсь, вы, ребята, можете указать мне правильное направление.

Спасибо,

  • Рольф

Ответы [ 2 ]

7 голосов
/ 02 сентября 2011

См. Этот урок, http://www.cimgf.com/2009/09/23/uitableviewcell-dynamic-height/

Хитрость заключается в том, чтобы заставить метку расти с размером ячейки, чем просто установить размер ячейки, и ячейка будет расти вместе с ней.

Установите метку timeAgo, чтобы выровнять ее по нижней части ячейки.

Установите для numberOfLines твита значение 0 через IB, переместите весь код розыгрыша и реализуйте только следующее:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    id item  = [self.item objectAtIndex:indexpath.row];

    CGFloat height = 85.0f;

    if ([item isKindOfClass:[Tweet class]]) {
        Tweet *tweet = (Tweet *)item;
        CGSize titleSize = [tweet.tweet sizeWithFont:[UIFont fontWithName:@"Arial" size:13.0f] constrainedToSize:CGSizeMake(260.0f, MAXFLOAT)];

        // adde the 24 pixels to get the height plus the time ago label.
        height =  titleSize.height + 24.0f;

    } else if( [item isKinfOfClass:[SC_Release class]]) {
        height = 65.0f;
    }

   return height;
}
3 голосов
/ 02 сентября 2011
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *string = [tweetsArray indexPath.row];
    CGSize labelSize = [string sizeWithFont:[UIFont fontWithName:@"Verdana" size:17.0] 
                                                     constrainedToSize:CGSizeMake(280.0f, MAXFLOAT) 
                                                         lineBreakMode:UILineBreakModeWordWrap];
    return labelSize.height + 20;
}
...