导航控制器下的表视图控制器:导航栏下的表视图背景

时间:2015-01-23 12:41:48

标签: ios uitableview background uinavigationcontroller translucency

我希望我能够解释我的实际问题。 我有一个导航控制器,其根控制器是一个表视图控制器。我想通过添加渐变子视图作为背景来绘制表视图控制器背景。每件事都运作良好,但渐变背景现在应用在导航栏下方,即使这是半透明的。事实上,我认为它是半透明的,但在这种配置中,背景刚刚从导航栏下方开始。 我还希望导航栏像下面的背景一样渐变。 我该怎么做? 我的问题清楚了吗? 非常感谢你。

[self drawGradientBackground];
- (void)drawGradientBackground
{
    self.view.backgroundColor = [UIColor clearColor];
    RMABackGround *background = [[RMABackGround alloc] initWithFrame:self.view.bounds];
    background.gradientColors =  @[[UIColor colorWithRed:52/255.0f green:153/255.0f blue:55/255.0f alpha:1.0f], [UIColor colorWithRed:53/255.0f green:168/255.0f blue:224/255.0f alpha:1.0f]];
    [self.view addSubview:background];
}

Into RMABackGround class:


- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();

    NSMutableArray *colors = [NSMutableArray arrayWithCapacity:[self.gradientColors count]];
    [self.gradientColors enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        if ([obj isKindOfClass:[UIColor class]]) {
            [colors addObject:(__bridge id)[obj CGColor]];
        } else if (CFGetTypeID((__bridge void *)obj) == CGColorGetTypeID()) {
            [colors addObject:obj];
        } else {
            @throw [NSException exceptionWithName:@"CRGradientLabelError"
                                           reason:@"Object in gradientColors array is not a UIColor or CGColorRef"
                                         userInfo:NULL];
        }
    }];

    CGContextSaveGState(context);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGContextTranslateCTM(context, 0, -rect.size.height);

    CGGradientRef gradient = CGGradientCreateWithColors(NULL, (__bridge CFArrayRef)colors, NULL);

    CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
    CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));

    CGContextDrawLinearGradient(context, gradient, startPoint, endPoint,
                                kCGGradientDrawsAfterEndLocation | kCGGradientDrawsBeforeStartLocation);

    CGGradientRelease(gradient);
    CGContextRestoreGState(context);

    [super drawRect:rect];
}

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。 事实上,这与我在开始时想到的渐变背景没有直接关系。 相反,我错误的是表视图,特别是如何为表视图背景和表视图单元格背景设置颜色。 但现在我解决了。 问题已结束。