3

我想要完成的事情:

我正在设计一个简单游戏的主屏幕。在屏幕的下半部分,我希望它包含一个集合视图,显示一个可供选择的级别列表(长列表,水平滚动,没什么特别的 - 所以它可以由标准流布局处理)。在屏幕的上半部分,我想要一堆静态的、不可滚动的元素,例如带有游戏标题的图像或标签、通向积分页面的静态按钮、用于输入用户名的文本字段等。

问题:

由于这个设计的重点似乎集中在集合视图上,我试图在我的故事板中使用 UICollectionViewController 来处理这个问题。但是,当我将 UICollectionViewController 拖到我的故事板中时,它似乎总是占据全屏。我找不到缩小它的方法,也找不到将任何按钮或标签拖放到它上面的方法。

问题:

我怎样才能完成如上所述的设计(集合视图只占据屏幕的一部分,另一部分被一些静态的、不可滚动的控件占据)?

我是不是该:

  1. 在流布局的页眉或页脚部分提供静态按钮?(但是我必须让它们“粘”,所以它们不会随着其余内容滚动
  2. 子类流布局并实现静态按钮作为布局的装饰视图
  3. 创建包含两个部分的自定义容器控制器,一个带有 UICollectionViewController,第二个带有带有一堆静态按钮的普通视图控制器
  4. 不要使用 UICollectionViewController,而是使用普通的 UIViewController 并“手动”处理集合数据源和委托(这似乎是很多不必要的工作)
  5. 也许我只是想念一些简单的方法来在 XCode 的 IB 中的 UICollectionViewController 上拖放按钮(或配置)
  6. 还有其他方法吗?

请注意: 1. 我是一个完整的 iOS 新手,可能会错过一些非常明显的解决方案 2. 除了共享同一个屏幕我所有的组件都非常标准,我不需要任何自定义布局或行为为我的收藏视图或按钮 - 所以我想知道最干净和最简单的方法是什么(我上面提出的一些潜在解决方案似乎可行,但对我来说,实现这样一个简单的屏幕听起来有点矫枉过正)

4

1 回答 1

1

我认为您需要如下图所示的内容
在此处输入图像描述

底部视图(缩略图视图)是使用UICollectionViewController创建的UICollectionView

我所做的是

  1. 创建了一个UICollectionViewController子类并将其视图(即collectionView)添加为mainViewController 的子视图。
  2. CollectionView 由其控制器类管理。我将其命名为SlideViewController

SlideViewController.h

 #import <UIKit/UIKit.h>

 @interface SlideViewController : UICollectionViewController

 @end   

SlideViewController.m

 #import "SlideViewController.h"
 #import "CollectionViewCell.h"


 @implementation SlideViewController

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
 {
   self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
  if (self) {
    // Custom initialization
   }
return self;
}

-(id)init
{
  UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];
  self = [super initWithCollectionViewLayout:layout];
   if (self) {
    layout.itemSize = CGSizeMake(100, 100);
    layout.sectionInset = UIEdgeInsetsMake(5, 10, 5, 10);
    layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
  }
 return self;
}

- (void)viewDidLoad
{
  [super viewDidLoad];
  self.view = self.collectionView;
//self.collectionView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
self.collectionView.backgroundColor = [UIColor orangeColor];
[self.collectionView registerClass:[CollectionViewCell class] forCellWithReuseIdentifier:@"cell"];

}  

如何使用

在主视图控制器中

 self.slideViewController= [[[SlideViewController alloc]init]autorelease];
 self.slideViewController.view.frame = CGRectMake(20, 300, 280, 200);
 [self.view addSubview:self.slideViewController.collectionView];
于 2013-04-26T08:43:23.313 回答