2012-01-30 166 views
0

我建立了一个自定义视图根据this tutorial视图渲染4.2

它工作正常,如果应用程序直接在device.But编译在创建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]) { 

     [email protected]"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; 
} 
+0

嗨,彼得,你可以发布你在UITableView的'heightForRowAtIndexPath:'方法中使用的代码吗? – Mutix 2012-01-30 14:25:17

+0

我刚添加它。 – PETER 2012-01-30 14:36:18

+0

@Mutix请注意,它在设备上直接编译工作正常。仅在创建.ipa文件和通过iTunes安装时出现问题。 – PETER 2012-01-30 14:43:09

回答

0

您是否尝试过在释放有直接的建设呢?通常直接编译是在没有应用优化的情况下完成的。我从来没有听说过这种情况,但可能有一些优化会破坏你的观点。

+0

谢谢你!它为我工作... – PETER 2012-02-01 14:58:52

+0

很高兴它的工作。自从xcode 4以来,他们已经很难弄清楚这是什么时候发生的。你必须知道去哪里看。 – Alkalin3 2012-02-01 17:25:23

0

我根据教程

有你的第一个编程错误建[...] 。 ;)

除了开玩笑,运行非调试可执行文件会导致应用程序有一个未初始化的,非零堆的实例变量值被保存。如果你没有初始化所有的实例变量,它可能会导致不可预知的行为。这可能是一个问题,但我们无法看到所涉及的所有代码,所以我们只能在可能出错的地方下注。并且您附加的代码似乎不是问题。这是破碎的气泡图。

+0

我刚刚用泡泡画出了代码,如果你不介意的话,就去看看吧。谢谢。 – PETER 2012-01-31 15:59:13