heightForRowAtIndexPath не отображает многострочный - PullRequest
1 голос
/ 05 марта 2011

heightForRowAtIndexPath никогда не отображает многострочный текст, если текст длиннее обычного.

Вот мой код:

#define FONT_SIZE 14.0f
#define CELL_CONTENT_WIDTH 320.0f
#define CELL_CONTENT_MARGIN 10.0f

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CGFloat     result = 44.0f;
    CGFloat     width = 0;
    CGFloat     tableViewWidth;
    CGRect      bounds = [UIScreen mainScreen].bounds;

    if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation))
        tableViewWidth = bounds.size.width;
    else
        tableViewWidth = bounds.size.height;

    width = tableViewWidth - 110;       // fudge factor, 115 isn't quite right

    NSUInteger index = [indexPath row];
    id doc = [[self displayedObjects] objectAtIndex:index];

    NSString *title = [doc title];  

    if (title)
    {
        // The notes can be of any height
        // This needs to work for both portrait and landscape orientations.
        // Calls to the table view to get the current cell and the rect for the 
        // current row are recursive and call back this method.
        CGSize      textSize = { width, 20000.0f };     // width and height of text area
        CGSize      size = [title sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap];

        size.height += 29.0f;               // top and bottom margin
        result = MAX(size.height, 44.0f);   // at least one row
    }

    return result;
}

Любая помощь будет очень полезна.Спасибо!

Ответы [ 2 ]

3 голосов
/ 05 марта 2011

Чтобы метка отображала многострочный текст, необходимо установить для его свойства numberOfLines максимально допустимое количество строк (или 0 для произвольного номера строки).Поэтому в cellForRowAtIndexPath: метод при настройке вашей ячейки добавьте:

...
cell.textLabel.numberOfLines = 0;
...
0 голосов
/ 05 марта 2011

Полагаю, вы не используете пользовательский UITableViewCell.Таким образом, вы, вероятно, устанавливаете заголовок где-то с помощью чего-то похожего на следующий код:

cell.textLabel.text = @"long long long text";

Чтобы получить текст в несколько строк, вы должны настроить заголовок UILabel по умолчанию для отображения текста в несколько строк.Вот так:

cell.textLabel.numberOfLines = 3;

Вы можете вычислить количество строк так же, как вычисляете высоту ячейки.На самом деле, я думаю, что вы должны вычислить оба, чтобы сделать то, что вы хотите (высота адаптирована к содержимому).

CGSize      size = [title sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap];

Что важно в textSize, так это установить ширину строки для атрибута width и heightзначение, которое является «достаточно большим» для «размещения» текста.

После инициализации size вы можете разделить высоту на высоту строки UILabel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...