【问题标题】:NavigationBar 's category works on Xcode9, but doesn't work on Xcode10NavigationBar 的类别适用于 Xcode9,但不适用于 Xcode10
【发布时间】: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


【解决方案1】:

只需要添加一行判断语句:

- (void)initOverlay
{
    if (!self.overlay &&
        self.subviews.count > 0) {
...

Xcode10 太奇怪了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 2017-03-12
    相关资源
    最近更新 更多