drawRect UIView UITableViewCell中可调整大小的高度

时间:2014-06-24 20:23:43

标签: ios objective-c uitableview uiview

我开始使用drawRect方法为UIView尝试制作消息泡泡。这是我到目前为止所做的(它不是很漂亮,但它是一个开始;接受建议让它看起来更好):

- (id)initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if (self) {
        self.backgroundColor = [UIColor clearColor];
        [self setFrame:CGRectMake(60, 5, 250, 50)];
        self.contentMode = UIViewContentModeRedraw;
    }
    return self;
}

- (void)drawRect:(CGRect)rect{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 1.0);
    CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
    CGContextBeginPath(context);
    CGContextMoveToPoint(context, 0, 11);
    CGContextAddCurveToPoint(context,5,12.5,10,15,10,10);
    CGContextAddCurveToPoint(context, 10, 1, 20, 1, 20, 1);
    CGContextAddCurveToPoint(context, 20, 1, 50, 1, 240, 1);
    CGContextAddCurveToPoint(context, 240, 1, 250, 1, 249, 15);
    CGContextAddCurveToPoint(context, 249, 30, 249, 40, 249, 40);
    CGContextAddCurveToPoint(context, 249, 45, 245, 49, 240, 49);
    CGContextAddCurveToPoint(context, 240, 49, 200, 49, 20, 49);
    CGContextAddCurveToPoint(context, 15, 49, 10, 45, 10, 40);
    CGContextAddCurveToPoint(context, 10, 40, 10, 30, 10, 20);
    CGContextAddCurveToPoint(context, 10, 20, 3, 20, 0, 10);
    CGContextStrokePath(context);
}

在我的自定义单元格中,我有一个UILabel,我正在设置自定义视图:

Bubble *bubble = [[Bubble alloc]init];
_bubble = bubble;
[self addSubview:_bubble];

UILabel *message = [[UILabel alloc]init];
message.backgroundColor = [UIColor yellowColor];
message.layer.borderWidth = 1;
[message setFont:[UIFont systemFontOfSize:12]];
message.numberOfLines = 0;
message.preferredMaxLayoutWidth = 200;
_message = message;
[bubble addSubview:_message];

我使用这种方法调整UILabel的大小:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    //...
    CGFloat height = [self heightForText:[[individualMessages 
        objectAtIndex:indexPath.row] valueForKey:@"theMessage"]];
    cell.message.frame = CGRectMake(20, 5, 220, height);
    //...
    return cell;
}

- (CGFloat)heightForText:(NSString*)text{
    ChatCell *cell = [[ChatCell alloc]init];
    cell.message.text = text;
    cell.message.font = [UIFont systemFontOfSize:12];
    [cell.message sizeToFit];
    return cell.message.frame.size.height;
}

我的问题是如何将“消息”UILabel的高度传递给子类UIView并绘制气泡?现在我只是将子类包含在自定义单元格中,但当然不会调整大小。有没有办法将高度传递给UIView并稍后将其包含在单元格中?

1 个答案:

答案 0 :(得分:1)

self.bounds.size应该在drawRect方法中为您提供视图的大小。

您还应该将视图的contentMode属性设置为UIViewContentModeRedraw,以便在调整视图大小时调用drawRect。否则,当视图调整大小时,您现有的气泡可能会被拉伸。