我的简单应用程序包含UICollectionViewController
和自定义UICollectionViewCell
。控制器放在Mainstoryboard中(我使用原生的xamarin)。我的应用程序有效,但我想在我的集合视图上方添加一个常见的“标题”控件(带有与/ describe集合一起使用的按钮和标签)。
我曾预料到,当我已经创建的集合视图位于StackView的底部并且我新创建的“标题”控件位于顶部时,可以通过UIStackView
来完成。但正如我所看到的,我无法将UICollectionViewController
添加为Stack view
的项目。
我认为它可以由TabBarController
来完成,但它看起来并不是一个好主意,特别是如果我有更多的一个潜在的控制按钮用于我的集合视图。
也许有更好的解决方案?
有人可以告诉我吗?
答案 0 :(得分:0)
您可以创建新的UIViewController
,并在其中添加UIStackView
。然后在UICollectionViewController
中初始化Storyboard
,在StackView中添加其视图:
UIView headerView = new UIView();
...//Add some items in this view
//Add a height constraint
headerView.AddConstraint(NSLayoutConstraint.Create(headerView, NSLayoutAttribute.Height, NSLayoutRelation.Equal, null, NSLayoutAttribute.NoAttribute, 1, 200));
MyStack.AddArrangedSubview(headerView);
MyCollectionView collection = Storyboard.InstantiateViewController("MyCollectionView") as MyCollectionView;
MyStack.AddArrangedSubview(collection.View);
但如果您只想添加标题视图,建议您使用UICollectionView
' Header
。
首先,使用下面的事件在CollectionView中创建标题
Source
:
public override UICollectionReusableView GetViewForSupplementaryElement(UICollectionView collectionView, NSString elementKind, NSIndexPath indexPath)
{
if (elementKind == "UICollectionElementKindSectionHeader" && indexPath.Section == 0)
{
UICollectionReusableView header = collectionView.DequeueReusableSupplementaryView(new NSString("UICollectionElementKindSectionHeader"), "MyHeader", indexPath);
//Add some items
//header.AddSubview();
return header;
}
return null;
}
不要忘记注册标题类:CollectionView.RegisterClassForSupplementaryView(typeof(UICollectionReusableView), new NSString("UICollectionElementKindSectionHeader"), "MyHeader");
最后设置Header的高度来显示它:
// This event exists in the UICollectionViewDelegateFlowLayout
public override CGSize GetReferenceSizeForHeader(UICollectionView collectionView, UICollectionViewLayout layout, nint section)
{
if (section == 0)
{
return new CGSize(UIScreen.MainScreen.Bounds.Size.Width, 300);
}
return CGSize.Empty;
}
答案 1 :(得分:0)
您可以通过在故事板中创建UICollectionView
并将UIStackView
和UIViewController
拖放为子视图,将UIStackView
作为子视图添加到UICollectionView
在里面。并将View Controller指定为Collection View的数据源属性
对于常见的标题控件,您可能希望使用UIView
或通过编程方法创建自定义XIB
,方法是创建UIView
的子类。
所以您的控制器层次结构将是
->UIViewController
->UIStackView
->UIView
->UICollectionView
但是,UIStackView
非常适用于您具有复杂视图层次结构的情况,您不必自己处理多个自动布局约束,但它有一些常见问题,您可能需要查看此问题post。
如果情况并非如此,那么您应该使用更简单的方法,只需手动添加约束来布局视图。