0

にセルがUITableViewあり、セルのラベル用にカスタム フレームを作成しました。このフレームはテキストに従ってサイズ変更されます。

しかし、私の問題は、テキストのサイズが大きくなり、バブルの画像のサイズも大きくなるにつれて、それらのテキストをバブル (画像) 内に表示する方法です。

4

3 に答える 3

3

使用する画像にこのコードを試してください:

- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight
于 2012-06-16T10:24:59.373 に答える
3

これを試して:

カスタム Cell.m ファイル内:

bgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 30, 80, 40)];
[self.contentView addSubview:bgImageView];

messageContentView = [[UITextView alloc] init];
messageContentView.backgroundColor = [UIColor clearColor];
messageContentView.editable = NO;
messageContentView.scrollEnabled = NO;
[messageContentView sizeToFit];
[self.contentView addSubview:messageContentView];

そしてtableView:cellForRowAtindexPath方法で:

static CGFloat padding = 20.0;  
CGSize textSize = {260.0 , 10000.0};
CGSize size = [message sizeWithFont:[UIFont boldSystemFontOfSize:13] constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap];
size.width += (padding/2);
UIImage *bgImage = nil;

    if([sender isEqualToString:@"you"])
    {
        bgImage = [[UIImage imageNamed:@"orange.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)];
    }
    else
    {
        bgImage = [[UIImage imageNamed:@"aqua.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.bgImageView.image = bgImage;
于 2012-06-16T11:01:04.987 に答える
2

画像の形状に応じて、キャップを使用して画像を引き伸ばすことができます

このコードを使用できます

//Your image view
UIImageView *imageView;
//Your image
UIImage *image;

//Left cap is the space you dont wanna stretch on the left side and right side of the image
int leftCap = 20;
//Left cap is the space you dont wanna stretch on the top side and bottom side of the image
int topCap = 20;
//this will only stretch the inner side of the image
imageView.image = [image stretchableImageWithLeftCapWidth:leftCap topCapHeight:topCap];

詳細については、このチュートリアルを確認してください

于 2012-06-16T10:21:44.060 に答える