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
.
我是 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
.