Просмотр рендеринга в iOS 4.2 - PullRequest
0 голосов
/ 30 января 2012

Я создал собственное представление для создания сообщений чата в соответствии с этим руководством.

Работает нормально, если приложение напрямую скомпилировано на устройстве. Но при создании файла ipa и его установкечерез iTunes, в iOS 4.2 высота пузырьков чата растягивается больше необходимого размера и вызывает перекрытие пузырьков чата.Но это нормально работает в iOS 5. Что может быть причиной этого? Заранее спасибо.

РЕДАКТИРОВАТЬ:

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

    NSDictionary *dict = (NSDictionary *)[messages objectAtIndex:indexPath.row];
    NSString *msg = [[dict objectForKey:@"message"] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    CGSize  textSize = { 260.0, 10000.0 };
    CGSize size = [msg sizeWithFont:[UIFont boldSystemFontOfSize:13]
                  constrainedToSize:textSize
                      lineBreakMode:UILineBreakModeWordWrap];

    size.height += padding*3;

    CGFloat height = size.height < 65 ? 65 : size.height;
    return height;

}

РЕДАКТИРОВАТЬ 2:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"MessageCellIdentifier";

    SMMessageViewTableCell *cell = (SMMessageViewTableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[[SMMessageViewTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }


    if ([messages count]>0) {
        NSLog(@"index path is %d",indexPath.row);

    NSDictionary *s = (NSDictionary *) [messages objectAtIndex:indexPath.row];


    NSString *sender =allTrim([s objectForKey:@"sender"]);
    NSString *senderId = [s objectForKey:@"friendId"];
    NSString *message = [s objectForKey:@"message"];
        if ([message length]<8)
        {
            message=[message stringByAppendingString:@"  "];
        }
    message=[message stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    NSString *time = [s objectForKey:@"time"];
    NSString *locatn = [s objectForKey:@"friendLocation"];

    CGSize  textSize = { 260.0, 10000.0 };
    CGSize size = [message sizeWithFont:[UIFont boldSystemFontOfSize:13]
                      constrainedToSize:textSize
                          lineBreakMode:UILineBreakModeWordWrap];

    size.width += (padding/2);

    cell.messageContentView.text = [message stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    cell.accessoryType = UITableViewCellAccessoryNone;
    cell.userInteractionEnabled = YES;
        cell.selectionStyle=UITableViewCellSelectionStyleNone;    
    UIImage *bgImage = nil;

    if ([senderId isEqualToString:UIAppDelegate.userId]) { 

        sender=@"Me";

        bgImage = [[UIImage imageNamed:@"ChatBubbleGray.png"] stretchableImageWithLeftCapWidth:24  topCapHeight:15];

        [cell.messageContentView setFrame:CGRectMake(padding, padding*2, size.width, size.height)];

        [cell.bgImageView setFrame:CGRectMake( cell.messageContentView.frame.origin.x - padding/2,
                                              cell.messageContentView.frame.origin.y - padding/2,
                                              size.width+padding,
                                              size.height+padding)];
        cell.senderAndTimeLabel.textAlignment=UITextAlignmentLeft;

    } else {


        bgImage = [[UIImage imageNamed:@"ChatBubbleGreen.png"] stretchableImageWithLeftCapWidth:24  topCapHeight:15];

        [cell.messageContentView setFrame:CGRectMake(320 - size.width - padding,
                                                     padding*2,
                                                     size.width,
                                                     size.height)];

        [cell.bgImageView setFrame:CGRectMake(cell.messageContentView.frame.origin.x - padding/2,
                                              cell.messageContentView.frame.origin.y - padding/2,
                                              size.width+padding,
                                              size.height+padding)];
        cell.senderAndTimeLabel.textAlignment=UITextAlignmentRight;


    }
    cell.bgImageView.image = bgImage;
    if ([locatn length]>0)
    {
        cell.senderAndTimeLabel.text = [NSString stringWithFormat:@"%@, %@   %@", sender, locatn, time];

    }
    cell.senderAndTimeLabel.text = [NSString stringWithFormat:@"%@,   %@", sender, time];
    }
    return cell;
}

Ответы [ 2 ]

0 голосов
/ 30 января 2012

Я построил [...] в соответствии с руководством

Там ваша первая ошибка программирования. ;)

Шутка в сторону, запуск неотлаженного исполняемого файла приводит к тому, что приложение имеет неинициализированную ненулевую кучу, в которой хранятся значения переменных экземпляра. Если вы не инициализируете все переменные вашего экземпляра, это может привести к непредсказуемому поведению. Это может быть проблемой здесь, но мы не можем видеть весь задействованный код, поэтому можем делать ставки только на то, что может быть не так. И код, который вы прикрепили, похоже, не является проблемой. Это рисунок пузырьков, который сломан.

0 голосов
/ 30 января 2012

Вы пробовали прямое построение в релизе?Обычно прямая компиляция выполняется без применения оптимизации.Я никогда не слышал об этом, но, возможно, некоторая оптимизация сводит на нет ваши взгляды.

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