如何将静态元素添加到UICollectionViewController或使它们与它共享相同的屏幕

时间:2013-04-26 07:32:06

标签: ios xcode storyboard uicollectionview

我想要完成的任务:

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

问题:

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

问题:

如何完成上述设计(集合视图只占用屏幕的一部分,另一部分被一些静态,不可滚动的控件占用)?

我应该:

  1. 在流程布局的页眉或页脚部分中提供静态按钮? (但之后我必须让它们“粘”,所以它们不会滚动内容的其余部分
  2. 子类流布局并将静态按钮实现为布局的装饰视图
  3. 使用两个部分创建自定义容器控制器,一个使用UICollectionViewController,第二个使用带有一组静态按钮的普通视图控制器
  4. 不要使用UICollectionViewController,而是使用普通的UIViewController并处理集合数据源并“手动”委托(这似乎是很多不必要的工作)
  5. 也许我只是想念一些简单的方法来拖放XCode IB中的UICollectionViewController上的按钮(或配置)
  6. 任何其他方式吗?
  7. 请注意:  1.我是完整的iOS新手,可能会错过一些非常明显的解决方案  2.除了共享同一个屏幕外,我的所有组件都是非常标准的,我不需要为我的集合视图或按钮设置任何自定义布局或行为 - 所以我想知道最简洁,最简单的方法(我上面提出的一些潜在的解决方案看起来似乎可以起作用,但对我来说听起来像实施这么简单的屏幕就太过分了。)

1 个答案:

答案 0 :(得分:1)

我认为您需要如下图所示的内容 enter image description here

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

我做的是

  1. 创建了一个UICollectionViewController子类,并将其视图(即collectionView)添加为mainViewController的子视图。
  2. CollectionView由其控制器类管理。我把它命名为 SlideViewController
  3. 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"];
    
    }  
    

    如何使用

    在mainViewController中

     self.slideViewController= [[[SlideViewController alloc]init]autorelease];
     self.slideViewController.view.frame = CGRectMake(20, 300, 280, 200);
     [self.view addSubview:self.slideViewController.collectionView];