我有GetCell
方法返回UITableViewCell
,在其中我想添加我的UICollectionViewController
,但是我可以让它显示任何内容的唯一方法是添加UICollectionView
从控制器到单元格。
这似乎很好,直到我尝试将ViewWillLayoutSubviews()
方法添加到我的UICollectionViewController
以检测设备旋转时的布局并调整其大小。我的问题是这个ViewWillLayoutSubviews()
方法永远不会被调用。
但是当我将它放在继承自UITableView
的类上时会调用它。我不能在这里做我的逻辑,因为我需要改变UICollectionViewCells
的宽度和高度。
感谢您提供有关调整UICollectionViewCells
大小或改进UICollectionViewController
添加到UITableViewCell
的方式的任何帮助。
我的GetCell()
方法:
public override UITableViewCell GetCell(UITableView tv)
{
UITableViewCell cell = tv.DequeueReusableCell(CellKey);
if (cell == null)
{
cell = new UITableViewCell(UITableViewCellStyle.Default, CellKey);
}
UICollectionView collectionView = tileController.CollectionView;
cell.ContentView.AddSubview(collectionView);
return cell;
}
我ViewWillLayoutSubviews
内的UICollectionViewController
(永远不会被叫到):
public override void ViewWillLayoutSubviews()
{
base.ViewWillLayoutSubviews();
nfloat mySectionInset = 20f;
nfloat myMinSpacing = 20f;
var screenWidth = UIScreen.MainScreen.Bounds.Width;
nfloat defaultTileWidth;
UICollectionViewFlowLayout flowLayout = Layout as UICollectionViewFlowLayout;
switch (UIApplication.SharedApplication.StatusBarOrientation)
{
case UIInterfaceOrientation.LandscapeLeft:
case UIInterfaceOrientation.LandscapeRight:
defaultTileWidth = (screenWidth - (mySectionInset * 3) - myMinSpacing) / 3;
flowLayout.ItemSize = new CGSize(defaultTileWidth, defaultTileWidth * 0.65f);
break;
case UIInterfaceOrientation.Portrait:
case UIInterfaceOrientation.PortraitUpsideDown:
defaultTileWidth = (screenWidth - (mySectionInset * 2) - myMinSpacing) / 2;
flowLayout.ItemSize = new CGSize(defaultTileWidth, defaultTileWidth * 0.65f);
break;
}
Layout.InvalidateLayout();
}