Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I know this has already been answered but I had problems getting the line to draw over the gradient. I figured there may be others that are having the same issue so here is how I solved it. This works for iOS 4x</p> <p>CustomTableViewSectionHeaderWithLine.h</p> <pre><code>#import &lt;UIKit/UIKit.h&gt; #import &lt;QuartzCore/QuartzCore.h&gt; @interface CustomTableViewSectionHeaderWithLine : UIView { UIColor *topColor; UIColor *bottomColor; UIColor *lineColor; } @property(nonatomic, retain) UIColor *topColor, *bottomColor, *lineColor; @end </code></pre> <p>CustomTableViewSectionHeaderWithLine.m</p> <pre><code>#import "CustomTableViewSectionHeaderWithLine.h" @implementation CustomTableViewSectionHeaderWithLine @synthesize topColor; @synthesize bottomColor; @synthesize lineColor; - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Set the colors to something heinous so if you forget you can know immediately if ([self topColor] == nil) topColor = [UIColor greenColor]; if ([self bottomColor] == nil) bottomColor = [UIColor yellowColor]; if ([self lineColor] == nil) lineColor = [UIColor redColor]; } return self; } - (void)drawRect:(CGRect)rect { //[super drawRect:rect]; //add a gradient: CAGradientLayer *gradientLayer = [[[CAGradientLayer alloc] init] autorelease]; [gradientLayer setBounds:[self bounds]]; CGRect newRect = CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height -1); [gradientLayer setFrame:newRect]; [gradientLayer setColors:[NSArray arrayWithObjects:(id)[topColor CGColor], (id)[bottomColor CGColor], nil]]; [[self layer] insertSublayer:gradientLayer atIndex:0]; //draw line CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextBeginPath(ctx); // This gets the RGB Float values from the color initialized for lineColor const float* colors = CGColorGetComponents( lineColor.CGColor ); CGContextSetRGBStrokeColor(ctx, colors[0], colors[1], colors[2], 1); //CGContextSetGrayStrokeColor(ctx, 0, 1); CGContextMoveToPoint(ctx, 0, rect.size.height); CGContextAddLineToPoint( ctx, rect.size.width, rect.size.height); CGContextStrokePath(ctx); } - (void)dealloc { [super dealloc]; } @end </code></pre> <p>Usage (Implement these two methods in your TableViewDelegate</p> <pre><code>- (UIView *) tableView:(UITableView *) tableView viewForHeaderInSection:(NSInteger)section { CustomTableViewSectionHeaderWithLine *customView = [[[CustomTableViewSectionHeaderWithLine alloc] initWithFrame:CGRectMake(0.0, 0.0, 360.0, 25.0)] autorelease]; [customView setTopColor:[UIColor whiteColor]]; [customView setBottomColor:[UIColor blackColor]]; [customView setLineColor:[UIColor whiteColor]]; UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(10, 3, tableView.bounds.size.width - 10, 18)] autorelease]; label.text = [tableView.dataSource tableView:tableView titleForHeaderInSection:section]; label.textColor = [UIColor blackColor]; label.backgroundColor = [UIColor clearColor]; [customView addSubview:label]; return customView; } - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 25; } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload