【发布时间】:2019-02-28 20:13:58
【问题描述】:
我在navigationBar 中添加了一个类别来更改背景图像,图像可能是渐变或透明的。
有趣的是,它适用于 Xcode9,但不适用于 Xcode10。与 iOS 版本无关。
代码:
@implementation UINavigationBar (Category)
static char overlayKey;
- (UIImageView *)overlay
{
return objc_getAssociatedObject(self, &overlayKey);
}
- (void)setOverlay:(UIImageView *)overlay
{
objc_setAssociatedObject(self, &overlayKey, overlay, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (void)el_setBackgroundImage:(UIImage *)backgroundImage
{
[self initOverlay];
self.overlay.image = backgroundImage;
}
- (void)initOverlay
{
if (!self.overlay) {
[self setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds) + kWindow_StatusBarHeight)];
imgView.userInteractionEnabled = NO;
imgView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
[[self.subviews firstObject] insertSubview:imgView atIndex:0];
self.overlay = imgView;
}
}
@end
使用:
[self.navigationController.navigationBar el_setBackgroundImage:[UIImage imageWithColor:[UIColor redColor] size:CGSizeMake(kScreenWidth, kWindow_NavigationBarHeight)]];
关于为什么会发生这种情况的任何想法?
【问题讨论】:
-
我找到了
self.navigationController.navigationBar.subviews方法得到的数组,在Xcode9中有一个值,在Xcode10中有一个空数组。
标签: ios objective-c runtime navigationbar