Страницы

Поиск по вопросам

понедельник, 15 октября 2018 г.

Как увеличить высоту navigation bar в iOS11?

До iOS 11 для изменения высоты navBar'a отлично работало такое решение:
const CGFloat height = 80; [self.navigationController.navigationBar setFrame:CGRectMake(0, 0, self.view.frame.size.width,height)];
https://stackoverflow.com/a/34850109
но в Xcode 9 + iOS 11, оно больше не работает


Ответ

Создайте класс-наследник от UINavigationBar. Переопределите метод layoutSubViews c нужной вам высотой:
Objective-C:
- (void)layoutSubviews { [super layoutSubviews]; CGFloat navBarHeigh = 100; CGFloat heightDelta = (([UIScreen mainScreen].nativeBounds.size.height == 2436) ? 44.0 : 20.0); for (UIView *subview in self.subviews) { if ([NSStringFromClass([subview class]) containsString:@"BarBackground"]) { CGRect subViewFrame = subview.frame; subViewFrame.origin.y = -heightDelta; subViewFrame.size.height = navBarHeigh + heightDelta; [subview setFrame: subViewFrame]; } } }
Swift:
override func layoutSubviews() { super.layoutSubviews() let navBarHeight: CGFloat = 100 let heightDelta: CGFloat = UIScreen.main.nativeBounds.height == 2436 ? 44 : 20 for subview in subviews { if String(describing: subview).contains("BarBackground") { subview.frame.origin.y = -heightDelta subview.frame.size.height = navBarHeight + heightDelta } } }
Укажите его для UINavigationController:

Результат:

Комментариев нет:

Отправить комментарий