菜鸟教程小白 发表于 2022-12-12 23:20:30

ios - 表格 View 中单元格的动态高度不起作用


                                            <p><p>我创建了一个 <code>table view</code>,它有 6 个标签和 2 个按钮。我正在使用自动布局。我正在从服务器获取数据。</p>
<p><strong>ViewController.cs</strong></p>
<pre><code>public partial class CaseHistoryController : UIViewController
{
    private List&lt;CaseSearchItem&gt; caseSearchItems;
    CaseHistorySourceClass caseSearchSourceclass;

    public CaseHistoryController (IntPtr handle) : base (handle)
    {
    }

    public override void ViewDidLoad()
    {
      base.ViewDidLoad();
      this.Title = &#34;Case History&#34;;

      View.BackgroundColor = UIColor.Clear.FromHexString(&#34;#DDDDDD&#34;, 1.0f);
      var task = GetCaseHistoryData();
    }

    private async Task GetCaseHistoryData()
    {
      caseSearchItems = await CaseHistoryServices.GetListCaseHistory();
      caseSearchSourceclass = new CaseHistorySourceClass(caseSearchItems);

      CaseHistorySourceClass.RowClicked += (sender, e) =&gt;
      {
            var webController = Storyboard.InstantiateViewController(&#34;UserInfoViewController&#34;) as UserInfoViewController;
            webController.caseSearchItem = (CaseSearchItem)sender;
            NavigationController.PushViewController(webController, true);
      };
      caseHistoryTableView.Source = caseSearchSourceclass;

      caseHistoryTableView.BackgroundColor = UIColor.Clear.FromHexString(&#34;#DDDDDD&#34;, 1.0f);
      caseHistoryTableView.SectionHeaderHeight = 0.0f;
      caseHistoryTableView.SectionFooterHeight = 5.0f;
      caseHistoryTableView.ContentInset = new UIEdgeInsets(0, 0, 10.0f, 0);
    }

    public override void ViewWillAppear(bool animated)
    {
      base.ViewWillAppear(animated);
      caseHistoryTableView.ReloadData();
      caseHistoryTableView.RowHeight = UITableView.AutomaticDimension;
      caseHistoryTableView.EstimatedRowHeight = 145.0f;
    }

    public class CaseHistorySourceClass : UITableViewSource
    {
      private List&lt;CaseSearchItem&gt; caseSearchItems;
      public CaseSearchItem caseSearchItem;
      public static event EventHandler RowClicked;
      public CaseHistorySourceClass(List&lt;CaseSearchItem&gt; caseSearchItems)
      {
            this.caseSearchItems = caseSearchItems;
      }
      public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
      {
            CaseHistoryTableCell cell = tableView.DequeueReusableCell(CaseHistoryTableCell.Key) as CaseHistoryTableCell ?? CaseHistoryTableCell.Create();
            var item = caseSearchItems;

            cell.BindData(item.Organization, item.Address, item.Doctor, item.UserName);
            cell.Layer.MasksToBounds = false;
            cell.Layer.CornerRadius = 10.0f;
            cell.BackgroundColor = UIColor.White;
            return cell;
      }

      public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
      {
            caseSearchItem = caseSearchItems;
            tableView.DeselectRow(indexPath, true);
            if (RowClicked != null)
                RowClicked(caseSearchItem, EventArgs.Empty);
      }

      public override nint RowsInSection(UITableView tableview, nint section)
      {
            return caseSearchItems.Count;
      }
    }

}
</code></pre>
<p><strong>TableViewCell.cs</strong></p>
<pre><code>public partial class CaseHistoryTableCell : UITableViewCell
{
   public static readonly NSString Key = new NSString(&#34;CaseHistoryTableCell&#34;);
   public static readonly UINib Nib;

   static CaseHistoryTableCell()
   {
          Nib = UINib.FromName(&#34;CaseHistoryTableCell&#34;, NSBundle.MainBundle);
   }

   public CaseHistoryTableCell(IntPtr handle) : base(handle)
   {
         // Note: this .ctor should not contain any initialization logic.
   }

   public static CaseHistoryTableCell Create()
   {
         return (CaseHistoryTableCell)Nib.Instantiate(null, null);
   }

   public void BindData(string hospitalLabel, string addressLabel, string drLabel, string patientLabel)
   {
         this.lbl_hospitalName.Text = hospitalLabel;
         this.lbl_address.Text = addressLabel;

         this.lbl_drName.Text = drLabel;
         this.lbl_patientName.Text = patientLabel;

         this.lbl_address.TextColor = UIColor.Clear.FromHexString(&#34;#000000&#34;, 0.54f);
         this.lbl_patientName.TextColor = UIColor.Clear.FromHexString(&#34;#000000&#34;, 0.54f);
         this.lbl_hospitalName.TextColor = UIColor.Clear.FromHexString(&#34;#000000&#34;, 0.87f);
         this.lbl_drName.TextColor = UIColor.Clear.FromHexString(&#34;#000000&#34;, 0.87f);
            this.btn_createAppointment.SetTitleColor(UIColor.Clear.FromHexString(&#34;#0072BA&#34;, 1.0f), UIControlState.Normal);
            this.btn_viewDetail.SetTitleColor(UIColor.Clear.FromHexString(&#34;#0072BA&#34;, 1.0f), UIControlState.Normal);

       }

       public override CGRect Frame
       {
            get
            {
                return base.Frame;
            }

            set
            {
                value.Y += 4;
                value.Height -= 2 * 4;
                base.Frame = value;
            }
      }

}
</code></pre>
<p><strong>我想要的是:</strong></p>
<p>我想让所有单元格高度动态化。但是每次,第二个单元格都没有进行调整。</p>
<p><strong>我尝试过的:</strong></p>
<p><strong>1.)</strong></p>
<p>在 <code>ViewDidAppear</code> 中,我设置了以下内容:</p>
<pre><code>public override void ViewWillAppear(bool animated)
{
    base.ViewWillAppear(animated);
    caseHistoryTableView.ReloadData();
    caseHistoryTableView.RowHeight = UITableView.AutomaticDimension;
    caseHistoryTableView.EstimatedRowHeight = 145.0f;
}
</code></pre>
<p><strong>2.)</strong></p>
<p>在 <code>GetCell</code> 方法中,我以这种方式添加单元格:</p>
<pre><code>public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
    CaseHistoryTableCell cell = tableView.DequeueReusableCell(CaseHistoryTableCell.Key) as CaseHistoryTableCell ?? CaseHistoryTableCell.Create();
    var item = caseSearchItems;
    cell.BindData(item.Organization, item.Address, item.Doctor, item.UserName);

    cell.Layer.MasksToBounds = false;
    cell.Layer.CornerRadius = 10.0f;
    cell.BackgroundColor = UIColor.White;
    cell.SetNeedsLayout();
    cell.LayoutIfNeeded();
    return cell;
}
</code></pre>
<p>但我仍然得到以下输出:</p>
<hr/>
<p>不采用自动高度的第二个单元格。</p>
<p> <a href="/image/Y8m1W.png" rel="noreferrer noopener nofollow"><img src="/image/Y8m1W.png" alt="enter image description here"/></a> </p>
<p><strong>标签 1 约束:(医院标签)</strong></p>
<p> <a href="/image/86nBc.png" rel="noreferrer noopener nofollow"><img src="/image/86nBc.png" alt="enter image description here"/></a> </p>
<p><strong>标签 2 约束:(地址标签)</strong></p>
<p> <a href="/image/A40Nu.png" rel="noreferrer noopener nofollow"><img src="/image/A40Nu.png" alt="enter image description here"/></a> </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>添加两个标签的高度,根据您对单行高度的要求,现在添加两个约束的关系,从 <code>equalto(=)</code> 到 <code>greaterthanorequalto(>=)</code></p>

<p>见下图。</p>

<p> <a href="/image/tPtHe.png" rel="noreferrer noopener nofollow"><img src="/image/tPtHe.png" alt="enter image description here"/></a> </p>

<p>现在运行并重新检查,如果现在遇到任何问题,请告诉我。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 表格 View 中单元格的动态高度不起作用,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/41294976/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/41294976/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 表格 View 中单元格的动态高度不起作用