Программно изменить высоту навигационной панели в быстрой

Я хочу создать более высокую навигационную панель, и я пытаюсь сделать это, используя подкласс UINavigationBar.

Вот мой подкласс UINavigationBar:

import UIKit class TallerNaviBar: UINavigationBar { override func sizeThatFits(size: CGSize) -> CGSize { var newSize:CGSize = CGSizeMake(size.width, 87) return newSize } } 

И в моем ViewController, который встроен в контроллер навигации, я пишу следующий код в функции viewDidLoad ()

 self.navigationController!.setValue(TallerNaviBar(frame: CGRectMake(0, 0, self.view.frame.size.width, 87)), forKeyPath: "navigationBar") 

Об ошибке не сообщается, но я ничего не получаю, когда запускаю код. Полностью пустой вид. введите описание изображения здесь ,

Любое предложение? Или какой-то другой способ изменения высоты? Благодарю.

 class TallerNaviBar: UINavigationBar { override func sizeThatFits(size: CGSize) -> CGSize { var newSize:CGSize = CGSizeMake(self.superview!.frame.size.width, 87) return newSize } } 

Я не делаю быстро, но ответ прост, вот ObjC

 - (CGSize)sizeThatFits:(CGSize)size { return CGSizeMake([self superview].frame.size.width, 40); } 

Вот моя интерпретация в Swift:

 import UIKit class TallerNaviBar: UINavigationBar { override func sizeThatFits(size: CGSize) -> CGSize { var newSize:CGSize = CGSizeMake(superview.width, 87) return newSize } } 

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

Я подклассу и изменяю размер всего в IOS, включая навигационные контроллеры и табуляторные контроллеры, чтобы обеспечить, чтобы все навигационные контроллеры использовали эту панель навигации, вы должны подклассифицировать навигационный контроллер и использовать этот навигационный контроллер во всем своем приложении, вот как работает подкласс, это Obj C, поэтому вам придется перевести его:

 @interface NSHNavigationController () <UINavigationBarDelegate, UINavigationControllerDelegate> { } @implementation NSHNavigationController #pragma mark Initialization - (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if (self) { [self NSHSetupNavigationController]; } return self; } - (instancetype)initWithNavigationBarClass:(Class)navigationBarClass toolbarClass:(Class)toolbarClass { self = [super initWithNavigationBarClass:navigationBarClass toolbarClass:toolbarClass]; if (self) { [self NSHSetupNavigationController]; } return self; } - (id)initWithRootViewController:(UIViewController *)rootViewController { self = [super initWithRootViewController:rootViewController]; if (self) { [self NSHSetupNavigationController]; } return self; } - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { [self NSHSetupNavigationController]; } return self; } - (void)dealloc { [self setInternalDelegate:nil]; [self setExternalDelegate:nil]; } #pragma mark Setup - (void)NSHSetupNavigationController { [self setValue:[[NSHNavigationBar alloc]init] forKeyPath:@"navigationBar"]; } 

это линия, которая сделает это за вас:

  [self setValue:[[NSHNavigationBar alloc]init] forKeyPath:@"navigationBar"]; 

О да, и убедитесь, что вы подклассифицируете навигационную панель, вы сказали, что были, но вот как вы это делаете, это просто:

 #import "NSHNavigationBar.h" @implementation NSHNavigationBar - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { NSDictionary *attributes = @{NSForegroundColorAttributeName:[UIColor whiteColor], NSFontAttributeName:fontMagicForRegularNSHFont}; [self setTitleTextAttributes:attributes]; [self setTranslucent:true]; [self setBackgroundColor:[UIColor clearColor]]; } return self; } - (CGSize)sizeThatFits:(CGSize)size { return CGSizeMake([self superview].frame.size.width, heightResizer(40)); } - (void)layoutSubviews { [super layoutSubviews]; } 

Итак, в общем, подкласс как UINavigationBar, так и UINavigationController, и вы настроены, это позволит вам манипулировать навигационной панелью, когда захотите, вы также можете набирать навигационные панели вашего контроллера, это немного орехи и будет путают много людей, но здесь он идет:

 -(CustomNavigationBar *)navBar { return (id)[self.navigationController navigationBar]; } 

поставьте материал выше в своем контроллере вида, а затем вы вызываете его следующим образом:

 [[self navBar] setBackGroundColor:[UIColor blueColor]]; 

Это приведет к тому, что ваш навигационный контроллер станет вашей настраиваемой навигационной панелью, если вы хотите здесь изменить высоту навигационной панели, тогда вы можете сделать что-то вроде этого:

Вот простое решение Swift 3, основанное на минимальном подклассе. Первый подкласс UINavigationBar .:

 class CustomNavigationBar: UINavigationBar { override func sizeThatFits(_ size: CGSize) -> CGSize { let newSize :CGSize = CGSize(width: self.frame.size.width, height: 54) return newSize } } 

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

 let nav = UINavigationController(navigationBarClass: CustomNavigationBar.self, toolbarClass: nil) 

Все существующее поведение для UINavigationBar сохраняется, и ваша пользовательская высота принимается.

  • Разница между pushViewController и showViewController
  • Панель навигации Навигация Элементы навигации, в результате чего верхняя область кнопок на толкаемом контроллере просмотра не может быть недоступна
  • iOS 7, поврежденный UINavigationBar при быстром обращении, используя встроенный по умолчанию интерактивныйPopGestureRecognizer
  • Как принудительно настроить отдельную UIInterfaceOrientation на индивидуальном представлении в UINavigationController?
  • UIWebView не загружает новый URL-адрес
  • Как добавить кнопку возврата для навигационной панели ABPersonViewController?
  • Как передать данные в родительский вид при использовании UINavigationController и кнопки Back Button по умолчанию?
  • Как программно подклассифицировать UINavigationBar для UINavigationController?
  • Автоматически устанавливать начальный viewController в навигационном контроллере (Layer SDK)
  • Встроенная кнопка обратной связи UINavigationController не работает
  • Как представить контроллер просмотра в портретном или ландшафтном режиме, в приложении, предназначенном только для портрета
  • Interesting Posts

    Невозможно выполнить Google + знак в ios, используя ионный 2

    Неверный указатель kCGImagePropertyOrientation

    Получить строку поиска в панели навигации в Swift

    Интеграция пользовательской аутентификации с параметром-сервером и auth0

    затрагивает, затрагивает, затрагивает проблему

    Как организовать много UIView в шаблоне, ориентированном на дисплеи различного размера

    iOS – Добавить жест жесткости в UITextField

    Как Modal или Представить viewController в Cocos2d V3?

    Проблема с телефонной связью при добавлении платформы

    Objective-c – преимущества использования NSCache над статическим NSMutableDictionary?

    Как обрезать изображение в iOS

    Enterprise App Single App Mode не всегда автоматически загружается

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

    Нажатие навигационного контроллера после отображения модального контроллера

    Почему приложение неожиданно не строит и не жалуется на ошибки «ld» и «clang»?

    Давайте будем гением компьютера.