Я пытался создать TableViewCell, состоящий из 2 UILabel в первом ряду и другого UILabel во втором ряду.
В симуляторе правильно работает макет рамок и меток. Тем не менее:
1) Высота не динамически увеличивается / уменьшается с каждой ячейкой
2) Таблица вылетает всякий раз, когда она прокручивается в симуляторе
Может кто-нибудь объяснить мне, что я делаю не так в этом коде? Не могу понять это.
Вот изображение ячейки, которую я пытаюсь создать:
T альтернативный текст http://www.bubl3r.com/photo.JPG
Это мой метод динамического выделения высоты ячейки:
#define CELL_PADDING 10.0f
#define IMAGE_SIDE_SIZE 50.0f
#define LABEL_HEIGHT 14.0f
#define LABELWIDTH_CALLSIGN 160.0f
#define LABELWIDTH_DATE 60.0f
#define LABELWIDTH_USER 160.0f
#define FONT_SIZE 11.0f
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
RFFlag *aFlag = [flagList objectAtIndex:[indexPath row]];
CGSize messageConstraint = CGSizeMake(LABELWIDTH_CALLSIGN + LABELWIDTH_DATE + CELL_PADDING,20000.0f);
CGSize messageSize = [aFlag.msg.station.callsign sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:messageConstraint lineBreakMode:UILineBreakModeWordWrap];
CGFloat height = MAX(messageSize.height, 44.0f);
CGFloat cellHeight = height + LABEL_HEIGHT + (CELL_PADDING * 3);
return cellHeight;
}
Это мой CelLForRowAtIndexPathMethod:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
RFFlag *aFlag = [flagList objectAtIndex:[indexPath row]];
UITableViewCell *cell;
UILabel *callsign,*dateposted,*message;
cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"Cell"]autorelease];
callsign = [[UILabel alloc] initWithFrame:CGRectMake(IMAGE_SIDE_SIZE + (CELL_PADDING*2), CELL_PADDING, LABELWIDTH_CALLSIGN, LABEL_HEIGHT)];
[callsign setMinimumFontSize:FONT_SIZE];
[callsign setFont:[UIFont systemFontOfSize:FONT_SIZE]];
[callsign setTag:3];
[[cell contentView] addSubview:callsign];
dateposted = [[UILabel alloc] initWithFrame:CGRectMake(CELL_PADDING*3 + IMAGE_SIDE_SIZE + LABELWIDTH_CALLSIGN, CELL_PADDING, LABELWIDTH_DATE, LABEL_HEIGHT)];
[dateposted setMinimumFontSize:FONT_SIZE];
[dateposted setFont:[UIFont systemFontOfSize:FONT_SIZE]];
[dateposted setTag:2];
[[cell contentView] addSubview:dateposted];
message = [[UILabel alloc] initWithFrame:CGRectZero];
[message setLineBreakMode:UILineBreakModeWordWrap];
[message setMinimumFontSize:FONT_SIZE];
[message setNumberOfLines:0];
[message setFont:[UIFont systemFontOfSize:FONT_SIZE]];
[message setTag:1];
[[cell contentView] addSubview:message];
}
if (!message)
message = (UILabel*)[cell viewWithTag:1];
[message setText:aFlag.msg.messageData];
[callsign setText:aFlag.msg.station.callsign];
[dateposted setText:aFlag.msg.createdDate];
CGSize messageConstraint = CGSizeMake(LABELWIDTH_CALLSIGN + LABELWIDTH_DATE + CELL_PADDING, 20000.0f);
CGSize messageSize = [aFlag.msg.messageData sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:messageConstraint lineBreakMode:UILineBreakModeWordWrap];
[message setFrame:CGRectMake(IMAGE_SIDE_SIZE + (CELL_PADDING*2), LABEL_HEIGHT + (CELL_PADDING*2), LABELWIDTH_CALLSIGN + CELL_PADDING + LABELWIDTH_DATE, MAX(messageSize.height,44.0f))];
return cell;
}