Closed touchbee closed 7 years ago
DId you find a solution to your issue?
I've applied the fix described in the comment. That seems to work for me.
Which solution works for you in your first comment url? I try some of them, it dose not work for me.
Here, that's essentially the content of my UINavigationBar+Aweseome.m file that I'm using on production in my app, hope it helps:
- (UIView *)overlay
{
return objc_getAssociatedObject(self, &overlayKey);
}
- (void)setOverlay:(UIView *)overlay
{
objc_setAssociatedObject(self, &overlayKey, overlay, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (void)lt_setBackgroundColor:(UIColor *)backgroundColor
{
if (!self.overlay) {
[self setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
self.overlay = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds) + 20)];
self.overlay.userInteractionEnabled = NO;
self.overlay.autoresizingMask = UIViewAutoresizingFlexibleWidth; // Should not set `UIViewAutoresizingFlexibleHeight`
[[self.subviews firstObject] insertSubview:self.overlay atIndex:self.subviews.count -1];
}
self.overlay.backgroundColor = backgroundColor;
}
- (void)lt_setTranslationY:(CGFloat)translationY
{
self.transform = CGAffineTransformMakeTranslation(0, translationY);
}
- (void)lt_setElementsAlpha:(CGFloat)alpha
{
[[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;
// when viewController first load, the titleView maybe nil
[[self subviews] enumerateObjectsUsingBlock:^(UIView *obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:NSClassFromString(@"UINavigationItemView")]) {
obj.alpha = alpha;
*stop = YES;
}
}];
}
- (void)lt_reset
{
[self setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
[self.overlay removeFromSuperview];
self.overlay = nil;
}
@touchbee At the first, thanks for your reply, but it does not work for me, I try to modify, I change the "obj.alpha = obj.alpha == 0 ? 0 : alpha" to "obj.alpha = alpha" in lt_setTranslationY: method, like this:
(void)lt_setElementsAlpha:(CGFloat)alpha { [[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; // when viewController first load, the titleView maybe nil [[self subviews] enumerateObjectsUsingBlock:^(UIView obj, NSUInteger idx, BOOL *stop) { if ([obj isKindOfClass:NSClassFromString(@"UINavigationItemView")]) { obj.alpha = alpha; } if ([obj isKindOfClass:NSClassFromString(@"_UINavigationBarBackIndicatorView")]) { // obj.alpha = obj.alpha == 0 ? 0 : alpha; obj.alpha = alpha; } }]; }
This works for me~
fixed in v2.1.9
http://stackoverflow.com/a/39650500/974782