#ios #objective_c #navigationbar
До 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, оно больше не работает
Ответы
Ответ 1
Создайте класс-наследник от 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: Результат:
Комментариев нет:
Отправить комментарий