2015-12-28 19 views
8

セルフサイジングUITableView Cellをビルドしようとしています。グーグル後、私はこのチュートリアルを見つけました: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); 
      } 
     } 
    } 
} 

ところで、私は自動レイアウトを使用して

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

ビューに置かれた制約に基づいて、autolayoutが機能します。コードは、各コンポーネントの制約を設定した後に正常に動作します。

関連する問題