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

Posted

技术标签:

【中文标题】CollectionView 单元格高度不会自动调整大小【英文标题】:CollectionView cell height is not automatically resizing 【发布时间】:2019-01-16 00:44:46 【问题描述】:

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

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

(顶部、底部、前导、尾随)到超级视图

高度 >= 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;
    

我试图让单元格成为集合视图的宽度并且高度灵活;但是,每当我填充单元格时,我总是会得到这样的结果: 单元格被截断并在末端有一个椭圆。我在网上读到约束必须正确才能动态调整大小,所以我缺少什么吗?

我还读到,要为每个单元格计算高度,我可以加载单元格的笔尖,填充它,然后在自定义 UICollectionViewDelegate 中手动设置大小。很酷的想法,但我可以找到任何适用于 Xamarin iOS 的工作示例。

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

【问题讨论】:

移除高度限制并将底部限制更改为 >= 10 将底部约束设置为小于或等于 10 做到了!!!!!!!!!猜猜我的约束已经关闭了 【参考方案1】:

1.通过

让你的标签支持多行
textLabel.LineBreakMode = UILineBreakMode.WordWrap;
textLabel.Lines = 0;  

2.设置单元格估计高度

cell.estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize

注意事项:

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

如果您的视图具有固有的内容高度,系统将使用这些 价值观。如果没有,则必须添加适当的高度约束, 无论是视图还是内容视图本身。

【讨论】:

现在单元格是小方块。仍然没有扩展以适应标签。如果我关闭剪辑到单元格的边界,我可以看到整个标签。不知道有没有帮助?另外,CollectionViewSource 中没有cell.EstimatedItemSize 你能把它的截图发给我吗? 更新帖子。我输入的文字比框中的要长很多。

以上是关于CollectionView 单元格高度不会自动调整大小的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自动布局动态调整具有固定宽度的collectionview单元格高度?

计算 NSString 高度以在 collectionView 单元格中使用

TableView 单元格高度不根据第一次重新加载时的 collectionview 高度

如何在水平collectionview中设置不同的单元格高度和宽度

为不同的 iPhone 设备自动调整 CollectionView 单元的大小

CollectionView 高度问题