0

Надеюсь, я смогу объяснить свою реальную проблему. У меня есть контроллер навигации, корневой контроллер которого является контроллером представления таблиц. Я хочу нарисовать фон контроллера табличного представления, добавив подвариант градиента в качестве фона. Каждая вещь работает хорошо, но фон градиента теперь применяется только под панелью навигации, даже если это полупрозрачный. На самом деле, я вижу это полупрозрачным, но в этой конфигурации фон просто начинается под навигационной панелью. Я хочу, чтобы панель навигации была градиентной, как на рисунке ниже. Как я могу это сделать? Является ли мой вопрос достаточно ясным? спасибо.Контроллер табличного представления под навигационным контроллером: фон с табличным фоном под навигационной панелью

[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]; 
} 
+0

привет riccardo, это поможет, если вы добавите скриншот и код, как вы инициализируете и добавляете градиент :) – nburk

+0

ах, я думаю, вам нужен определенный балл, чтобы добавить скриншоты к вопросам. попытайтесь получить этот результат. и еще один намек: пожалуйста, обновите вопрос кодом, чтобы он был на самом деле читаемым, а не размещал его в комментариях :) – nburk

+0

как я могу вставить код, чтобы лучше объяснить мои вопросы? –

ответ

0

Я решил эту проблему. На самом деле это не было напрямую связано с градиентным фоном, как я думал при начале. Вместо этого я ошибся с табличным представлением и, в частности, с тем, как установить цвет фона таблицы и фона ячейки таблицы. Но теперь я решил. Проблема закрыта.

Смежные вопросы