мне удалось достичь этой простой пример
, используя подкласс UINavigationBar и устанавливая представление коллекции для контроллера представления navigationItem.titleView
#import <UIKit/UIKit.h>
@interface NavigationBar : UINavigationBar
@end
#import "NavigationBar.h"
@implementation NavigationBar
- (CGSize)sizeThatFits:(CGSize)size
{
return CGSizeMake(self.superview.bounds.size.width, 80);
}
-(void)setFrame:(CGRect)frame {
CGRect f = frame;
f.size.height = 80;
[super setFrame:f];
}
@end
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end
#import "ViewController.h"
#import "CollectionViewCell.h"
@interface ViewController()<UICollectionViewDelegate, UICollectionViewDataSource>
@property (nonatomic, weak) UICollectionView *collectionView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, 300, 80) collectionViewLayout:layout];
collectionView.backgroundColor = [UIColor clearColor];
self.navigationItem.titleView = collectionView;
[collectionView registerClass:[CollectionViewCell class] forCellWithReuseIdentifier:@"cell"];
collectionView.delegate = self;
collectionView.dataSource = self;
}
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 1;
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return 5;
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
CollectionViewCell *cell = (CollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
cell.backgroundColor = [UIColor orangeColor];
return cell;
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
return CGSizeMake(50, 50);
}
@end
Я установил собственный Панель навигации в Interface Builder
Отказ от ответственности 1: Я не могу обещать, что это решение для будущего доказательства или будет работать в любом случае. Я не тестировал его такими вещами, как авто-макет или ротация.
Отказ от ответственности 2: Лично я буду реализовывать любой источник данных/делегат независимо от контроллера вида. Для просмотра таблиц и коллекций я использую свой собственный рост OFAPopulator.
Вот пример кода: gitlab.com/vikingosegundo/collectionview-in-navigationbar/tree/... Есть еще некоторые особенности пользовательского интерфейса в ней. Но, вероятно, этого следовало ожидать. Я думаю, что Apple просто не считала, что мы меняем высоту. На самом деле, я никогда не видел приложение с разной высотой для его навигационной панели. Но код отвечает на ваш вопрос. Дайте ему больше любви, и это может быть полезно для вас.
Вы пытались добавить collectionview в заголовок navigationItem, как описано в [здесь] (http://stackoverflow.com/questions/8433016/customize-navigation-bar-with-title-view)? – ozgur