将UICollectionViewFlowLayout的ItemSize设置为device的宽度

时间:2015-05-30 16:05:35

标签: xamarin xamarin.ios

使用Xamarin,我正在尝试创建一个UICollectionViewFlowLayout,其中我的单元格将是设备的宽度并垂直向下流动。像Facebook新闻标签iOS应用程序的东西。

目前要在布局中获取单元格,这里是代码:

public override async void ViewWillAppear (bool animated)
        {
            try{
                base.ViewWillAppear (animated);

                var layout = new UICollectionViewFlowLayout ();
                layout.MinimumInteritemSpacing = 30;


                var collectionView = new NewsListView (UIScreen.MainScreen.ApplicationFrame, layout);
                collectionView.AutoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight;
                collectionView.BackgroundColor = UIColor.LightGray;
                collectionView.RegisterClassForCell (typeof(NewsListViewCell), cellId);
                collectionView.ReloadData ();



                CollectionView = collectionView;

                Logger.Log(""+CollectionView.Bounds.Width);



            }catch(Exception ex){
                Logger.Log (ex);
                ShowUserMessage ("Error",ex.Message);
            }
        }

我想用它来设置项目的大小:     layout.ItemSize = new CGSize(CollectionView.Bounds.Width-20,200.0f);

但是当我创建UICollectionViewFlowLayout时,CollectionView还不存在,

有没有其他方法可以将UICollectionViewFlowLayout的大小设置为设备的宽度?

1 个答案:

答案 0 :(得分:3)

我找到了解决问题的方法。我将布局创建为全局变量,然后将其添加到ViewDidLoad()中的视图,然后在ViewWillAppear(..)中我可以设置layout.ItemSize

所以我的代码如下:

new Thread(() => MyFunc(myParam)).Start()

这样,布局的项目宽度始终基于设备宽度而不是硬编码