До 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:
Результат:
Комментариев нет:
Отправить комментарий