簡體   English   中英

在iOS 4.2中查看渲染

[英]View rendering in iOS 4.2

我根據本教程構建了一個自定義視圖來制作聊天消息

如果直接在設備上編譯該應用程序會很好用,但是在創建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;
}

您是否嘗試過在發布中直接構建? 通常,直接編譯是在沒有應用優化的情況下完成的。 我從未聽說過這種情況,但是,可能有一些優化正在破壞您的觀點。

根據一個教程建立了[...]

您的第一個編程錯誤。 ;)

順便說一句,運行非調試可執行文件會使應用程序具有未初始化的,未清零的堆,該堆中保留了實例變量值。 如果不初始化所有實例變量,則可能導致不可預測的行為。 這可能是一個問題,但是我們看不到所有涉及的代碼,因此我們只能押注可能出錯的地方。 您確實附加的代碼似乎並不是問題所在。 是破裂的氣泡圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM