Как сильно ты этого хочешь? И насколько тонким (или толстым) вы хотите сделать свою навигационную панель?
Один из подходов - установить преобразование панели навигации для масштабирования и преобразования. Если вы масштабируете его слишком сильно, текст заголовка и кнопки будет выглядеть странно, но если вам нужно только побрить несколько пикселей, вы можете быть в порядке.
Вот результат масштабирования до 75% от полной высоты (33 пикселя в высоту):
И код, который произвел это:
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.title = @"Thin Navigation Bar";
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle: @"Press Me" style:UIBarButtonItemStyleBordered target: nil action: NULL ] autorelease];
CGFloat scale = .75;
CGFloat cy = 44.0 - ( 44.0 * scale );
self.navigationController.navigationBar.transform = CGAffineTransformScale( CGAffineTransformMakeTranslation( 0, -cy / 2.0 ), 1.0, scale ) ;
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
CGFloat scale = .75;
CGFloat cy = 44.0 - ( 44.0 * scale );
CGRect r = self.view.frame;
r.origin.y -= cy;
r.size.height += cy;
self.view.frame = r;
}
Теперь, у этого есть много проблем, которые могут или не могут быть решены. # 1 заключается в том, что вы боретесь с UINavigationController для определения размера и расположения панели навигации и представлений контроллера представления. Анимация между контроллерами представления, использующими эту технику, вероятно, будет выглядеть странно.
Мне было бы любопытно, если бы вы могли решить связанные проблемы ...
Еще одна мысль: если вы не используете UINavigationController, тогда на самом деле не так много проблем с этим, кроме сжатого текста. Или вы можете использовать контроллер навигации, но скрыть панель навигации по умолчанию и добавить тонкую панель навигации в каждое из представлений контроллера дочернего представления. Вы можете даже создать подкласс UINavigationBar и установить преобразование изнутри:
@interface TSThinNavBar : UINavigationBar
{
}
@end
@implementation TSThinNavBar
// assuming we'll always be constructed from a nib
- (id) initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder: aDecoder];
if ( self != nil )
{
CGFloat scale = .75;
CGFloat cy = 44.0 - ( 44.0 * scale );
self.transform = CGAffineTransformScale( CGAffineTransformMakeTranslation( 0, -cy / 2.0 ), 1.0, scale ) ;
}
return self;
}
@end