所以我在我的 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 的宽度,并使高度灵活;然而,每当我填充单元格时,我总是得到这样的东西: 单元格被截断并在末尾有一个椭圆。我在网上读到约束必须正确才能动态调整大小,所以我缺少什么吗?
我还读到要为每个单元格计算高度,我可以加载单元格的 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/