c# - CollectionView 单元格高度不会自动调整大小

标签 c# ios xamarin uicollectionview mvvmcross

所以我在我的 Xamarin iOS 项目中遇到了 UICollectionView 的一些问题。

CollectionView 的单元格没有随着其中的标签展开。单元格中的标签将 lines 设置为 0 并具有以下限制:

  • (top, bottom, leading, trailing) 到父 View

  • 高度 >= 10

在我的 ViewDidLoad() 中,我按如下方式设置 CollectionView:

var source = new CustomCollectionViewSource(collectionView);
        collectionView.Source = source;
        collectionView.SetCollectionViewLayout(new UICollectionViewFlowLayout()
        {
            ScrollDirection = UICollectionViewScrollDirection.Vertical,
            EstimatedItemSize = new CGSize(collectionView.Frame.Width, 10)
        }, false);

        var set = this.CreateBindingSet<MainViewController, MainViewModel>();
        set.Bind(source).For(v => v.ItemsSource).To(vm => vm.DataSource);
        set.Apply();

和我的CollectionViewSource

 public class CustomCollectionViewSource : MvxCollectionViewSource
{
    public IList<Item> Messages { get; set; }

    public override void ReloadData()
    {
        var list = (ItemsSource as IEnumerable<Item>).ToArray();
        Messages = list;
    }

    public CustomCollectionViewSource(UICollectionView collectionView) : base(collectionView)
    {
        collectionView.RegisterNibForCell(CustomCollectionViewCell.Nib, CustomCollectionViewCell.Key);
    }

    public override UICollectionViewCell GetCell(UICollectionView collectionView, NSIndexPath indexPath)
    {
        var cell = collectionView.DequeueReusableCell(CustomCollectionViewCell.Key, indexPath) as CustomCollectionViewCell;
        cell.DataContext = Messages.ElementAtOrDefault(indexPath.Row);

        return cell;
    }
}

我试图让单元格成为 Collection View 的宽度,并使高度灵活;然而,每当我填充单元格时,我总是得到这样的东西:UICollectionView Cells that are cutoff enter image description here 单元格被截断并在末尾有一个椭圆。我在网上读到约束必须正确才能动态调整大小,所以我缺少什么吗?

我还读到要为每个单元格计算高度,我可以加载单元格的 Nib ,填充它,然后在自定义 UICollectionViewDelegate 中手动设置大小。好主意,但我可以找到 Xamarin iOS 的任何工作示例。

如果我遗漏了什么或您需要任何其他信息,请告诉我。提前致谢!

最佳答案

1.让你的标签支持多行

textLabel.LineBreakMode = UILineBreakMode.WordWrap;
textLabel.Lines = 0;  

2.设置cell预估高度

cell.estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize

注意事项:

  • 要定义单元格的高度,您需要一个不间断的链
    填充区域的约束和 View (具有定义的高度)
    在内容 View 的上边缘和下边缘之间。

  • 如果您的 View 具有固有的内容高度,系统会使用那些 值。如果不是,则必须添加适当的高度限制, View 或内容 View 本身。

关于c# - CollectionView 单元格高度不会自动调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54208900/

相关文章:

android - Flutter - 如何将数据从网站解析为 ListView

ios - 为什么我需要 'import ' 框架'?

带有设备 UDID 的 Iphone 应用程序

android - 类似于 Gmail Android 应用程序的导航

c# - 如何编写更新查询来更新 mongodb 中的多个字段?

C# Parallel.For 和未初始化数组

xamarin - 如何从 Xamarin Android C# 项目调用返回字符串选项的 PCL 中的 F# 方法?

c# - 为 MQTTnet 客户端消息的 TLS/SSL 加密导入的 PFX 证书适用于服务,但在 Xamarin UWP 应用程序中失败

c# - EF Core 无法从匿名类型的查询选择转换为 DTO 对象类

C# AES 256 位解密给定的加密文本和 secret