Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

配置表的 TabBarItemImageColor 会覆盖 UIImageRenderingModeAlwaysOriginal 的 image #736

Closed
LiuHowin opened this issue Sep 29, 2019 · 4 comments
Labels

Comments

@LiuHowin
Copy link

现存问题:
在想使用图片默认颜色而不设置TabBarItemImageColor的情况下,在UITabBar+QMUI.m文件里的line63-67,会把image的RenderingModel(我设置了UIImageRenderingModeAlwaysOriginal)强制改为UIImageRenderingModeAutomatic

期望目标:
在TabBarItemImageColor为空的条件下,不做任何处理是否合理一点?

@MoLice
Copy link
Collaborator

MoLice commented Sep 29, 2019

这是个问题,我们看看,多谢指出。

@MoLice
Copy link
Collaborator

MoLice commented Sep 29, 2019

已在内部版本修复,下个版本会带上,在此之前你可以将以下代码替换本地的 UITabBar+QMUI.m 文件中的对应代码。

OverrideImplementation([UITabBar class], @selector(setItems:animated:), ^id(__unsafe_unretained Class originClass, SEL originCMD, IMP (^originalIMPProvider)(void)) {
    return ^void(UITabBar *selfObject, NSArray<UITabBarItem *> *items, BOOL animated) {
        
        // 应用配置表样式
        [items enumerateObjectsUsingBlock:^(UITabBarItem * _Nonnull item, NSUInteger idx, BOOL * _Nonnull stop) {
            if (QMUICMIActivated) {
                if (@available(iOS 13.0, *)) {
                    // iOS 13 通过 appearance 的方式修改,具体请查看 QMUIConfiguration.m
                } else {
                    UIImage *image = item.image;
                    if (image.renderingMode != UIImageRenderingModeAlwaysOriginal) {
                        if (TabBarItemImageColor) {
                            image = [[image qmui_imageWithTintColor:TabBarItemImageColor] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];// 如果不强制指定 original,系统总是会以 template 的方式渲染,并且颜色也是系统默认的灰色,无法改变
                            item.image = image;
                        }
                    }
                }
            }
        }];
        
        // call super
        void (*originSelectorIMP)(id, SEL, NSArray<UITabBarItem *> *, BOOL);
        originSelectorIMP = (void (*)(id, SEL, NSArray<UITabBarItem *> *, BOOL))originalIMPProvider();
        originSelectorIMP(selfObject, originCMD, items, animated);
        
        [items enumerateObjectsUsingBlock:^(UITabBarItem * _Nonnull item, NSUInteger idx, BOOL * _Nonnull stop) {
            // 双击 tabBarItem 的功能需要在设置完 item 后才能获取到 qmui_view 来实现
            UIControl *itemView = (UIControl *)item.qmui_view;
            [itemView addTarget:selfObject action:@selector(handleTabBarItemViewEvent:) forControlEvents:UIControlEventTouchUpInside];
        }];
    };
});

@MoLice MoLice added bug and removed suggest labels Sep 29, 2019
@MoLice MoLice changed the title 关于UITabBar+QMUI.m里处理tab bar image的一个建议 配置表的 TabBarItemImageColor 会覆盖 UIImageRenderingModeAlwaysOriginal 的 image Sep 29, 2019
@EuniconZero
Copy link

多谢 本地已替换

@MoLice
Copy link
Collaborator

MoLice commented Oct 12, 2019

已发布 4.0.2 修复该问题。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants