ltebean / LTNavigationBar

UINavigationBar Category which allows you to change its appearance dynamically

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

iOS11 无法获取_titleView

opened this issue · comments

  • (void)lt_setTitleAlpha:(CGFloat)alpha {

    if (@available(iOS 11.0, *)) {

    } else {

      UIView *titleView = [self valueForKey:@"_titleView"];
      titleView.alpha = alpha;
    

    }
    }

同样 [self valueForKey:@"_leftViews"] 会crash

commented

想问一下这个问题你们解决了吗?

commented

解决的话可以贴一下解决方式么

[self valueForKey:@"_leftViews"] 会crash的我的解决办法
会crash的原因是,iOS11 UINavigationBar 没有_leftViews,_rightViews,_titleView这些key
解决办法:通过代码找到leftButton 、rightButton和titleView,然后改变他们的透明度
tip:我们项目中没有用到titleView,所以我找到了leftButton和rightButton,至于titleView在哪,需要自己慢慢去发现
//如果是iOS 11
if (@available(iOS 11, *))
{
[[self subviews] enumerateObjectsUsingBlock:^(UIView *obj, NSUInteger idx, BOOL *stop) {

        if ([obj isKindOfClass:NSClassFromString(@"_UINavigationBarContentView")]) {
            
            for (UIView *view in [obj subviews])
            {
                view.alpha = alpha;
            }
        }
    }];
}
else
{
    [[self valueForKey:@"_leftViews"] enumerateObjectsUsingBlock:^(UIView *view, NSUInteger i, BOOL *stop) {
        view.alpha = alpha;
    }];
    
    [[self valueForKey:@"_rightViews"] enumerateObjectsUsingBlock:^(UIView *view, NSUInteger i, BOOL *stop) {
        view.alpha = alpha;
    }];
    
    UIView *titleView = [self valueForKey:@"_titleView"];
    titleView.alpha = alpha;
}

@xq931014 你好,不知道这个问题,你最后找到titleView了吗,还是说你从其他途径解决此问题了,如有方法,谢谢解惑.

@LoveJuly 好的,谢谢推荐.