Xamarin 堆栈视图中来自 xib 的自调整大小自定义视图 iOS

Self Size Custom View from xib in Stack view in Xamarin iOS

我是 Xamarin 开发的新手,我正在尝试显示特定票证的评论列表。评论的正文有不同的文字大小。我有一个自定义视图 TicketCommentRowUIView.xib:

using Foundation;
using System;
using UIKit;
using ObjCRuntime;

namespace Project.iOS
{
    public partial class TicketCommentRowUIView : UIView
    {
        public TicketCommentRowUIView(IntPtr handle) : base(handle)
        {
        }
        public static TicketCommentRowUIView CreateView(TicketCommentModel model)
        {
            TicketCommentRowUIView v = CreateView();
            v.LoadModelInfo(model);

            return v;
        }
        private static TicketCommentRowUIView CreateView()
        {
            var arr = NSBundle.MainBundle.LoadNib("TicketCommentRowUIView", null, null);
            var v = Runtime.GetNSObject<TicketCommentRowUIView>(arr.ValueAt(0));

            return v;
        }

        private void LoadModelInfo(TicketCommentModel model)
        {
            DateReply.Text = model.CreatedAt.ToShortDateString();
            MessageReply.Text = model.Content;
            ReplierImage.Image = UIImage.FromBundle("default_image_user");

        }
    }
}

我将该自定义视图动态添加到 TicketDetailViewController 中的堆栈视图,但我不知道如何根据其自身大小调整自定义视图的大小:

using Foundation;
using System;
using UIKit;
using System.Collections.Generic;
using System.Linq;
using CoreGraphics;

namespace Project.iOS
{
    public partial class TicketDetailViewController : UIViewController
    {
        private nfloat TicketItemHeight = 200;
        TicketModel _ticketItem;
        List<TicketCommentModel> _ticketCommentsList;
        TicketDetailPresenter _presenter;

        public TicketDetailViewController (IntPtr handle) : base (handle)
        {
            _presenter = new TicketDetailPresenter(this);
        }

        public async override void ViewDidLoad()
        {
            base.ViewDidLoad();
            ScrollView.LoadingStart();
            await _presenter.LoadTicketComments(_ticketItem.Id);
            FillComentsStackView();
            ScrollView.LoadingComplete();
        }

        public void LoadMenuItem(TicketModel ticketItem)
        {
            _ticketItem = ticketItem;
        }

        public void FillComentsStackView()
        {
            foreach (TicketCommentModel item in _ticketCommentsList)
            { 
                TicketCommentRowUIView itemView = TicketCommentRowUIView.CreateView(item);
                itemView.HeightAnchor.ConstraintEqualTo(TicketItemHeight).Active = true;
                CommentStackView.AddArrangedSubview(itemView);
            }
        }

    }
}

我的问题是我不知道如何为每个自定义视图添加自身大小,因为 MessageReply UILabel 的高度是可变的...我设置了一个等于 200 的约束,但是当文本太大时大它看起来重叠。当它是一个短文本时,就会有很多空白 space。有什么办法吗?在我的 android 项目中,我只是设置了 WrapContent 布局参数并且它起作用了。但我找不到将其应用于 iOS 项目的方法。

您似乎已经将 Label 的第 0 行设置为包装其内容。

然后您可以在您的 xib 中设置每个项目的约束,使您的自定义视图适合自己的大小。从您的屏幕截图中,您可以设置图像的左上约束和 DateReply 的上左约束,最后设置 MessageReply 的左上右下约束,例如:

调整常数以满足您的要求。此外,当您在 TicketDetailViewController 中添加自定义视图时,无需设置 HeightAnchor.