Когда я переопределяю layoutSubviews UINavigationbar, все подпредставления удаляются. Я пытаюсь установить пользовательскую высоту панели навигации. Он работал нормально, но сломался в iOS 11. Это настраиваемая категория.
Проблема с категорией UINavigationBar в iOS 11
Ответы (1)
Я создал подкласс UINavigationBar с методами setFrame: и layoutSubviews. Вам нужно установить подкласс как NavigationBar NavigationController в раскадровке.
CGFloat const NavBarHeight = 88.0;
- (CGSize)sizeThatFits:(CGSize)size {
return [self getNavBarSize];
}
- (void)setFrame:(CGRect)frame {
frame.size.height = NavBarHeight;
for (UIView *subview in self.subviews) {
if ([NSStringFromClass([subview class]) containsString:@"UINavigationBarContentView"]) {
subview.frame = CGRectMake(0, 20, self.frame.size.width, NavBarHeight-30);
}
[subview sizeToFit];
}
[super setFrame:frame];
}
- (void)layoutSubviews {
[super layoutSubviews];
for (UIView *subview in self.subviews) {
if ([NSStringFromClass([subview class]) containsString:@"BarBackground"]) {
subview.frame = CGRectMake(0, -20, self.frame.size.width, NavBarHeight+20);
[subview sizeToFit];
}else if ([NSStringFromClass([subview class]) containsString:@"UINavigationBarContentView"]) {
subview.frame = CGRectMake(0, 20, self.frame.size.width, NavBarHeight-30);
}
}
}
person
krishnanunni
schedule
26.02.2018