Изменить высоту панели навигации iPhone - PullRequest
5 голосов
/ 21 мая 2009

Мой клиент не может прочитать шрифты iPhone по умолчанию, размер слишком мал. У меня есть приложение с панелью навигации, и мне нужно увеличить в нем все, например, размер шрифта.

ИБ, похоже, не позволяет ... никакой помощи?

Большое спасибо!

Ответы [ 6 ]

13 голосов
/ 21 мая 2009

Обновление: сегодня (2012) наблюдается гораздо большая тенденция к пользовательским интерфейсам, поэтому я бы сказал, что ответ ниже слишком суров. Хотя до сих пор нет поддерживаемого способа настройки высоты, но вы, безусловно, можете извлечь из UINavigationBar и переопределить некоторые методы определения размеров. Это, вероятно, не приведет к тому, что вас отвергнут (хотя это все еще серая область, просто то, что Apple, вероятно, пропустит сегодня).

Как только вы получите нужный размер, вы можете использовать API настройки iOS 5 для добавления пользовательского фонового изображения (см. Сессия 114 WWDC 2011 - Настройка внешнего вида элементов управления UIKit).

Оригинальный ответ с 2009 года:

Это вообще невозможно.

Более того, я считаю, что повышение навигационной панели - это нарушение руководств Apple Human Interface Guidelines, и ваше приложение может отклонено из App Store из-за этого. Пожалуйста, убедитесь, что ваш клиент понимает этот риск, прежде чем продолжить.

(Указание на риск отклонения обычно является хорошим способом убедить клиенты против принятия глупых решений.)

11 голосов
/ 15 декабря 2014

Многие из приведенных здесь ответов являются неправильными или неполными, поэтому я хотел добавить свой ответ здесь в надежде, что он может пролить свет на некоторые вопросы.

Во-первых, нет ничего плохого в изменении высоты панели навигации. Люди, комментирующие, что это не разрешено, или идут вразрез с руководящими принципами, просто неправильно понимают эти руководящие принципы.

Возможность настройки или изменения панели навигации по умолчанию, которая используется внутри UINavigationController, была частью SDK начиная с iOS 5.

- (instancetype)initWithNavigationBarClass:(Class)navigationBarClass toolbarClass:(Class)toolbarClass NS_AVAILABLE_IOS(5_0);

Самый простой способ изменить высоту строки состояния - использовать этот метод при инициализации контроллера навигации, передавая пользовательский подкласс UINavigationBar.

TestViewController *t = [[TestViewController alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithNavigationBarClass:[MyNavigationBar class] toolbarClass:[UIToolbar class]];
[nav setViewControllers:@[t]];  
[self.window setRootViewController:nav];
[self.window makeKeyAndVisible];

Где пример такого пользовательского класса UINavigationBar может выглядеть так:

@interface MyNavigationBar : UINavigationBar
@end

@implementation MyNavigationBar

- (CGSize)sizeThatFits:(CGSize)size
{
        CGSize s = [super sizeThatFits:size];
        s.height = 90; // Or some other height
        return s;
}

@end
7 голосов
/ 22 июля 2009

Если вы решили просто изменить размер шрифта на панели навигации, вы можете сделать это (обычно с помощью UIViewController 'viewDidLoad метода):

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];

[titleLabel setBackgroundColor:[UIColor clearColor]];
// here's where you can customize the font size
[titleLabel setFont:[UIFont boldSystemFontOfSize:18.0]];
[titleLabel setTextColor:[UIColor whiteColor]];
[titleLabel setText:self.title];
[titleLabel sizeToFit];
[titleLabel setCenter:[self.navigationItem.titleView center]];

[self.navigationItem setTitleView:titleLabel];

[titleLabel release];
5 голосов
/ 21 марта 2012

Подклассами вы можете достичь этого и при этом поддерживать iOS 3 + :

Полный пример:

#import <UIKit/UIKit.h>

@interface ASNavigationBar : UINavigationBar
@property (nonatomic , retain) UIImage *backgroundImage;
@end

И реализация:

#import "ASNavigationBar.h"

@implementation ASNavigationBar
@synthesize backgroundImage = _backgroundImage;

-(void) setBackgroundImage:(UIImage *)backgroundImage
{
    if (_backgroundImage != backgroundImage)
    {
        [_backgroundImage release];
        _backgroundImage = [backgroundImage retain];
        [self setNeedsDisplay];
    }
}

-(void) drawRect:(CGRect)rect
{
    // This is how the custom BG image is actually drawn
    [self.backgroundImage drawInRect:rect];
}

- (CGSize)sizeThatFits:(CGSize)size 
{
    // This is how you set the custom size of your UINavigationBar
    CGRect frame = [UIScreen mainScreen].applicationFrame;
    CGSize newSize = CGSizeMake(frame.size.width , self.backgroundImage.size.height);
    return newSize;
}
@end

Важные примечания:

  1. Если фоновое изображение с прозрачными областями, вы должны установить его свойство barStyle на "полупрозрачный", иначе прозрачные области будут черными.
  2. Если у вас NavigationBar выше 44 баллов, вы должны принять во внимание, что позиция BarButtonItems может быть неправильной. Все они будут привязаны к нижней части бара. Вы можете исправить это, переопределив layoutSubviews и изменив их значение origin.y.
1 голос
/ 16 декабря 2013

Вы не должны изменять высоту панели навигации. Из руководства по программированию Apple на View Controller:

Настройка внешнего вида панели навигации

В интерфейсе навигации контроллер навигации владеет своим объектом UINavigationBar и отвечает за его управление. Не разрешается изменять объект панели навигации или изменять его границы, рамки или альфа-значения напрямую. Однако есть несколько свойств, которые можно изменять, включая следующие:

● свойство barStyle

● полупрозрачное свойство

● свойство tintColor

(взято из Apple: https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/NavigationControllers.html)

ОБНОВЛЕНИЕ - IOS 7 --- пока можно изменить только доступные свойства, но ниже приведен большой урок о том, как добиться гибкости в панели навигации http://www.appcoda.com/customize-navigation-status-bar-ios-7/

0 голосов
/ 17 мая 2016

Добавить к ответу Скелы:

Если вы запускаете свой контроллер навигации в раскадровке, вы можете изменить класс панели UINavigationBar в раскадровке на свою собственную панель навигации.

enter image description here

enter image description here

и затем реализовать изменение высоты в классе

@interface MyNavigationBar : UINavigationBar
@end

@implementation SwitchAssessmentNavigationBar

- (CGSize)sizeThatFits:(CGSize)size
{
        CGSize s = [super sizeThatFits:size];
        s.height = 200; // Or some other height
        return s;
}

@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...