2015-12-28 3 views
8

Я пытаюсь построить саморазмерUITableView Cell. После googled я нашел этот урок: https://pontifex.azurewebsites.net/self-sizing-uitableviewcell-with-uitextview-in-ios-8/, который неплох.Xamarin ios как сделать самоустанавливающийся UITableViewCell при редактировании

swift, говорится, что tableView?. BeginUpdates может обновить размер пользовательской ячейки. Но, похоже, он не работает в xamarin ios.

Может ли кто-нибудь помочь мне в этом? Большое спасибо!

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 и установить

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

И я сделал следующие настройки, а также.

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

      return UITableView.AutomaticDimension; 
     } 

Большое спасибо, если кто-то может направить меня!

ответ

4

Основываясь на ограничениях, размещенных на представлении, автозапуск будет работать. Код работает отлично после того, как я установил ограничения для каждого компонента.