2011-12-01 75 views
3

我一直在網上衝浪弄清楚如何讓我的表格高度符合其內容(我的內容是不同的高度)。Monotouch:UITableViewCell height

我試過看這個樣本.... http://simon.nureality.ca/simon-says-project-d-uitableviewcells-autosize-based-on-text-height-in-monotouch-heres-how/ ...但我不能讓它工作。

這裏是我到目前爲止的代碼..細胞高度實際工作,但文本與trailling dotts中心(而不是迪林出整個幀):

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; 
} 

而且它看起來像這樣.. 。

enter image description here

任何想法有什麼不好?

謝謝!

+0

您是否可以將UILabel添加爲單元格的ContentView的一部分?看起來這比試圖操縱TextLabel框架要容易得多。 – Anuj

+0

Emmm不知道如何做到這一點(這對我來說是新的):) – MojoDK

回答

3

您可以通過設置LinesLineBreakMode性質控制爲textLabel的行爲。

例如,設置

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

將讓你的標籤做自動換行,並根據需要使用盡可能多的行。

還可以考慮使用Miguel De Icaza的MonoTouch.Dialog。它大大簡化了與UITableView的交互。

+0

謝謝 - 現在文本看起來很好...除了爲什麼圖像有一個左填充文本是高的時候? – MojoDK

+0

無法弄清楚如何使用MonoTouch.Dialog「MoveRow」。 – MojoDK

+0

我自己並沒有這樣做,但不是它只是更新用於表的基礎數據結構的一種情況,即從列表中刪除元素並將其插入到其他地方? – Ryan