我想要完成的任务:
我正在设计一个简单的游戏主屏幕。在屏幕的下半部分,我希望它包含一个集合视图,显示可供选择的级别列表(长列表,可水平滚动,没有任何花哨 - 所以它可以由标准流程布局处理)。在屏幕的上半部分,我想要一堆静态的,不可滚动的元素,如带有游戏标题的图像或标签,一个通向信用页面的静态按钮,一个用于输入用户名的文本字段等。
问题:
由于这个设计的焦点似乎集中在一个集合视图,我试图在我的故事板中使用UICollectionViewController来处理这个问题。但是,当我将UICollectionViewController拖入我的故事板时,它似乎总是占据全屏。我找不到缩小它的方法,也没有找到拖延的方法。将任何按钮或标签放在上面。
问题:
如何完成上述设计(集合视图只占用屏幕的一部分,另一部分被一些静态,不可滚动的控件占用)?
我应该:
请注意: 1.我是完整的iOS新手,可能会错过一些非常明显的解决方案 2.除了共享同一个屏幕外,我的所有组件都是非常标准的,我不需要为我的集合视图或按钮设置任何自定义布局或行为 - 所以我想知道最简洁,最简单的方法(我上面提出的一些潜在的解决方案看起来似乎可以起作用,但对我来说听起来像实施这么简单的屏幕就太过分了。)
答案 0 :(得分:1)
我认为您需要如下图所示的内容
底部视图(缩略图视图)是使用 UICollectionViewController 创建的 UICollectionView 。
我做的是
UICollectionViewController
子类,并将其视图(即collectionView)添加为mainViewController的子视图。 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];