Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Monotouch: высота UITableViewCell

Автор вопроса: MojoDKОтветов: 1

Я занимался серфингом в сети, чтобы выяснить, как сделать так, чтобы высота моей таблицы соответствовала ее содержимому (мой контент имеет разную высоту).

Я пытался посмотреть на этот образец.... http://simon.nureality.ca/simon-says-project-d-uitableviewcells-autosize-based-on-text-height-in-monotouch-heres-how/ ... но я не могу заставить это работать.

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

public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
    string item = this.Lst.Items [indexPath.Section];

    UITableViewCell cell = tableView.DequeueReusableCell (_cellIdentifier);
    if (cell == null) {
        cell = new UITableViewCell (UITableViewCellStyle.Default, _cellIdentifier);
        cell = new UITableViewCell (UITableViewCellStyle.Subtitle, _cellIdentifier);
    }

    // Find the height...
    SizeF textWidth = new SizeF (tableView.Bounds.Width - 40, float.MaxValue);
    SizeF textSize = tableView.StringSize(item, Font, textWidth, LineBreakMode);

    // Textlabel...
    cell.TextLabel.Text = item;
    cell.TextLabel.Font = Font;
    cell.TextLabel.Frame = new RectangleF(cell.TextLabel.Frame.X, cell.TextLabel.Frame.Y, textSize.Width, textSize.Height);

    //cell.Accessory = UITableViewCellAccessory.DisclosureIndicator;
    cell.ImageView.Image = PlaceholderImage;
    cell.EditingAccessory = UITableViewCellAccessory.DisclosureIndicator;

    // Sizing the cell...
    RectangleF rectCell = cell.Frame;
    rectCell.Height = textSize.Height;
    cell.Frame = rectCell;

    return cell;
}

public override float GetHeightForRow(UITableView tableView, NSIndexPath indexPath)
{
    string item = this.Lst.Items [indexPath.Section];
    SizeF size = new SizeF (tableView.Bounds.Width - 40, float.MaxValue);
    float height = tableView.StringSize (item, Font, size, LineBreakMode).Height + 10;
    return height;
}

И это выглядит так...

введите здесь описание изображения

Есть идеи, что не так?

Спасибо!

Моджо

  • Можно ли добавить UILabel как часть ContentView ячейки? Кажется, это было бы намного проще, чем пытаться манипулировать фреймом TextLabel. Anuj 01.12.2011
  • Эммм не знаю, как это сделать (это новое для меня) :) MojoDK 02.12.2011

uitableview

Ответы

Ответ 1 · рейтинг 3 · Ryan

Вы можете управлять поведением текстовой метки, устанавливая свойства Lines и LineBreakMode.

Например, установка

cell.TextLabel.Lines = 0;
cell.TextLabel.LineBreakMode = UILineBreakMode.WordWrap;

позволит вашей метке выполнять перенос слов и использовать столько строк, сколько необходимо.

Также рассмотрите возможность использования MonoTouch.Dialog от Miguel De Icaza. Это значительно упрощает работу с UITableView.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы