Monotouch: высота UITableViewCell

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

Я пытался посмотреть на этот образец.... 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;
}

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

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

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

Спасибо!

Моджо


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


Ответы (1)


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

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

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

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

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

person Ryan    schedule 01.12.2011
comment
Спасибо - теперь текст выглядит нормально ... но почему изображение имеет отступ слева, когда текст высокий? - person MojoDK; 01.12.2011
comment
Не удалось понять, как MoveRow с MonoTouch.Dialog. - person MojoDK; 02.12.2011
comment
Я сам этого не делал, но разве это не просто обновление базовой структуры данных, используемой для таблицы, т.е. удаление элемента из списка и вставка его в другое место? - person Ryan; 02.12.2011
comment
Да, но мне нужно показать ручку перетаскивания и анимацию при перемещении строки между другими строками. Я не вижу, что это возможно в MT.Dialog. - person MojoDK; 02.12.2011