2015-12-28 40 views
8

düzenlerken kendi kendine boyutlandırma UITableViewCell'i nasıl oluşturabilirim Kendi kendine boyutlandırmaUITableView Cell'u oluşturmaya çalışıyorum. Googled sonra, bu öğretici bulundu: oldukça iyi https://pontifex.azurewebsites.net/self-sizing-uitableviewcell-with-uitextview-in-ios-8/.Xamarin ios

swift içinde, tableView? BeginUpdates, özel hücrenin boyutunu güncelleyebilir. Ama xamarin ios'da çalışmıyor gibi görünüyor.

Birisi bana yardım edebilir mi? Çok teşekkürler!

using System; 
using Foundation; 
using UIKit; 
using CoreGraphics; 

namespace Ma 
{ 
    public partial class DataInput : UITableViewCell 
    { 
     public string title { get; set;} 
     public static readonly UINib Nib = UINib.FromName ("DataInput", NSBundle.MainBundle); 
     public static readonly NSString Key = new NSString ("DataInput"); 

     public string value { get; set;} 

     public DataInput (IntPtr handle) : base (handle) 
     { 

     } 

     public static DataInput Create() 
     { 
      return (DataInput)Nib.Instantiate (null, null) [0]; 
     } 

     public void Populate() 
     { 
      this.Title.Text = this.title; 
      if (!string.IsNullOrEmpty(value)) { 
       this.Input.Text = this.value; 
      } 
     } 

     public string GetInputValue() 
     { 
      return this.Input.Text; 
     } 

     public UITableView GetTableView() 
     { 
      UITableView table = null; 

      UIView view = this.Superview; 
      if (view != null) { 
       table = (UITableView)view.Superview;      
      } 

      return table; 
     } 

     public override void AwakeFromNib() 
     { 
      base.AwakeFromNib(); 
      this.Input.ScrollEnabled = false; 
      this.Input.Delegate = new DataInputDelegate(); 
     } 

     public override void SetSelected (bool selected, bool animated) 
     { 
      base.SetSelected (selected, animated); 

      if (selected) { 
       this.Input.BecomeFirstResponder(); 
      } else { 
       this.Input.ResignFirstResponder(); 
      } 
     } 
    } 

    public partial class DataInputDelegate : UITextViewDelegate 
    { 
     public override void Changed (UITextView textView) 
     { 
      var size = textView.Bounds.Size; 
      var newSize = textView.SizeThatFits (new CGSize (size.Width, size.Height)); 

      if (size.Height != newSize.Height) { 
       UITextView.AnimationsEnabled = false; 

       UITableViewCell input = (UITableViewCell)textView.Superview.Superview; 
       UITableView tableView = (UITableView)input.Superview.Superview; 

       // This is the place of updating custom cell size, but It's not working now. 
       tableView.BeginUpdates(); 
       tableView.EndUpdates(); 
       UITextView.AnimationsEnabled = true; 

       var thisIndexPath = tableView.IndexPathForCell (input); 
       tableView.ScrollToRow (thisIndexPath, UITableViewScrollPosition.Bottom, false); 
      } 
     } 
    } 
} 

BTW, autolayout kullanarak ve

TableView.EstimatedRowHeight = 50; 
TableView.RowHeight = UITableView.AutomaticDimension; 

set Ve ben de kurulumu aşağıdaki yapmış ediyorum.

public override nfloat GetHeightForRow(UITableView tableView, NSIndexPath indexPath) 
     { 
      if (indexPath.Row == 0) { 
       return 80.0f; 
      } 

      return UITableView.AutomaticDimension; 
     } 

Birisi bana rehberlik edebilirse çok teşekkürler!

cevap

4

Görünümdeki kısıtlamalara dayanarak, otomatik oynatma çalışır. Kod, her bileşenin kısıtlamalarını oluşturduktan sonra iyi çalışıyor.

İlgili konular