在UITableViewCell中获取UICollectionViewController的旋转事件

时间:2016-08-05 14:34:49

标签: ios xamarin rotation xamarin.ios uicollectionview

我有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();
    }

0 个答案:

没有答案