将UISearchBar添加到嵌入NavigationController IOS6的UICollectionviewController

将UISearchBar添加到嵌入NavigationController IOS6的UICollectionviewController,ios,uinavigationcontroller,uisearchbar,uicollectionview,Ios,Uinavigationcontroller,Uisearchbar,Uicollectionview,我想向UICollectionViewController添加一个搜索栏,它以以下方式嵌入: UIAbbarController>UINavigationbarController>UICollectionViewController>SearchBar(!) 在此视图中,搜索栏将替换导航栏 在相同的设计下,如果我使用UITableViewController测试上述内容,搜索栏会显示得很好(通过编程和故事板) 问题是,当我使用故事板框架时,我无法在UICollectionViewControl

我想向UICollectionViewController添加一个搜索栏,它以以下方式嵌入: UIAbbarController>UINavigationbarController>UICollectionViewController>SearchBar(!) 在此视图中,搜索栏将替换导航栏

在相同的设计下,如果我使用UITableViewController测试上述内容,搜索栏会显示得很好(通过编程和故事板)

问题是,当我使用故事板框架时,我无法在UICollectionViewController上添加搜索栏;它只是坐在视图的中间,至于如何把它移到顶端,我一无所知。另外,它总是显示在UICollectionview下面,因此不可见

因此,采取另一种方式,通过编程:

-(void)viewWillAppear:(BOOL)animated{
self.searchBarTop = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
[self.searchBarTop setPlaceholder:@"Enter your command here"];
self.searchDC = [[UISearchDisplayController alloc]initWithSearchBar:self.searchBarTop contentsController:self];
self.searchBarTop.delegate = self;

[[self navigationController] setNavigationBarHidden:NO animated:animated];
[self.navigationController.navigationBar addSubview:self.searchBarTop];
}
这样,搜索栏就会显示得很好。但不幸的是,当我输入一些文本时,它会消失在视图上方——可能是因为底层的导航栏会这样做——(不知道为什么……)

我不清楚为什么搜索栏与UITableViewController配合得很好,为什么UICollectionViewController会如此痛苦。 也就是说,任何人都知道为什么搜索栏/导航栏消失了,以及我如何修复它

欢迎任何解决办法

谢谢!
-A

添加一个标题,并将
搜索栏
放入其中(这是我过去所做的)。话虽如此,我已经养成了一个习惯,几乎从不使用
UITableViewController
(除非我实现了
StaticCell
TableView
)或
UICollectionViewController
)。我建议实现一个标准的
UIViewController
,只需添加
UICollectionView
。将
CollectionView
缩小一些,并将
搜索栏
放在顶部。这允许您始终显示一个
搜索栏
(我的用户通常更喜欢它,而不是滚动到顶部来更改、编辑搜索)

我使用以下代码将UISearchBar添加到UICollectionViewController。 不幸的是,我无法使UISearchDisplayController工作

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.collectionView.frame), 44)];
    self.searchBar.autocorrectionType = UITextAutocorrectionTypeNo;
    self.searchBar.delegate = self;
    [self.collectionView addSubview:self.searchBar];
    [self.collectionView setContentOffset:CGPointMake(0, 44)];
}

- (void) viewWillAppear:(BOOL)animated{
    // to show search bar
    [self.collectionView setContentOffset:CGPointMake(0, 0)];
    // to hide search bar
    [self.collectionView setContentOffset:CGPointMake(0, 44)];
}

-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
    [searchBar setShowsCancelButton:YES animated:YES];
}

-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
    [searchBar setText:@""];
    [searchBar setShowsCancelButton:NO animated:YES];
    [searchBar resignFirstResponder];
}

谢谢这可能是一个我必须考虑的解决方案,我同意,因为UICLoopDeVIEW控制器似乎使用了100%的视图。我希望在需要时隐藏/显示搜索栏,因此导航栏提供了一种简单的方法。但是,在允许uicollectionview正确调整大小的同时,对UIViewController执行同样的操作将需要一些返工。如果可以的话,我宁愿避免。现在。在标题中没有,因为这个选项不是我要找的(搜索栏将随视图滚动)。我可能会尝试另一个-UIViewController-虽然我倾向于认为我应该遵循UICollectionViewController/UICollectionView对。如果不希望它与scrollview一起滚动,则需要使用ViewController,然后添加CollectionView您是对的,但这在代码中增加了异构性,使它的可重用性大大降低。我可能不得不重新考虑整件事。我仍然不明白为什么UITableviewController可以正常工作,而UICollectionViewController却无法正常工作。不管怎样,杰,谢谢你的帮助!您不必在代码中将其添加到头中。这可以在界面生成器中完成。嗨,尤金,谢谢!事实上,这几乎是Jay的解决方案,而这并不是我所需要的。在此期间,我发现这一个:,它适合我的需要。干杯。除此之外,您还可以将版面的headerReferenceSize属性设置为CGSizeMake(320.0,44.0),以便内容在44.0点之后开始