Текст растягивается за границы ячейки при удалении слайда - PullRequest
0 голосов
/ 21 июня 2011

Ячейка tableView UITableViewCellStyleSubtitle будет обрезать текст.Кроме того, обычный UITableCell из нескольких строк будет обрезать текст, если используется слайд удаления.

Однако моя ячейка UITableViewCellStyleSubtitle из нескольких строк не усекает текст, когда появляется слайд удаления. Вместо этого он растягивается внеГраницы ячейки.Можно это исправить?Вот мой код ...

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"SwitchCell"];

if (cell==nil){
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cellType"] autorelease];
    // set the labels to the appropriate text for this row
    cell.textLabel.text = [(Group*)[composeData objectInChosenGroupsListAtIndex:indexPath.row]groupName];
    cell.textLabel.lineBreakMode=UILineBreakModeTailTruncation;
    cell.textLabel.numberOfLines = 0;

    if ([(Group*)[composeData objectInChosenGroupsListAtIndex:indexPath.row]isDynamic]){
         cell.detailTextLabel.text = NSLocalizedString(@"dynamic", @"dynamic");
    }
    else {
        //get and set the group size
        int groupSize = [(Group*)[composeData objectInChosenGroupsListAtIndex:indexPath.row]groupSize];

        if (groupSize == 1)
            cell.detailTextLabel.text = NSLocalizedString(@"1Contact", @"1 contact");
        else
            cell.detailTextLabel.text = [NSString stringWithFormat:NSLocalizedString(@"%dContacts", @"%d contacts"), groupSize];
    }     
}

return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

UITableViewCell *cell = (UITableViewCell *)[self tableView: tableView cellForRowAtIndexPath: indexPath];

CGRect frame = [UIScreen mainScreen].bounds;
CGFloat width = frame.size.width;

int section = indexPath.section;

NSString *title_string = cell.textLabel.text;
NSString *detail_string = cell.detailTextLabel.text;

CGSize title_size = {0, 0};
CGSize detail_size = {0, 0};

if (title_string && [title_string isEqualToString:@""] == NO ) {
    title_size = [title_string sizeWithFont:[UIFont systemFontOfSize:22.0]
                          constrainedToSize:CGSizeMake(width, 4000)
                              lineBreakMode:cell.textLabel.lineBreakMode];
}

if (detail_string && [title_string isEqualToString:@""] == NO ) {
    detail_size = [detail_string sizeWithFont:[UIFont systemFontOfSize:18.0]
                            constrainedToSize:CGSizeMake(width, 4000)
                                lineBreakMode:cell.detailTextLabel.lineBreakMode];
}

CGFloat title_height = title_size.height;
CGFloat detail_height = detail_size.height;

CGFloat content_size = title_height + detail_height;

CGFloat height;

switch ( section ) {

    case 0:
        height = content_size;
        break;

        //Just in case  
    default:
        height = 44.0;
        break;

}

return height;

}

Ответы [ 2 ]

0 голосов
/ 22 июня 2011

Это было так сложно! Проблема заключается в том, что он всегда будет растягивать текст, если для numberOfLines задано значение 0. Поэтому мне нужно было вычислить numberOfLines и установить его для каждой ячейки.

cell.textLabel.numberOfLines = textLabelheight/textLabelFontSize;
0 голосов
/ 21 июня 2011

Попробуйте установить размер меток, который будет соответствовать вашей МАКСИМАЛЬНОЙ ширине, например:

cell.textLabel.frame.size.width = someWidth;

cell.detailTextLabel.frame.size.width = someWidth;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...