Проблема с категорией UINavigationBar в iOS 11

Когда я переопределяю layoutSubviews UINavigationbar, все подпредставления удаляются. Я пытаюсь установить пользовательскую высоту панели навигации. Он работал нормально, но сломался в iOS 11. Это настраиваемая категория.


person krishnanunni    schedule 22.02.2018    source источник


Ответы (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