UINavigationBar をカスタマイズするには 2 つの異なる方法があることを知っています。背景画像をカスタム png に設定するか、バーの外観をプログラムでコードでカスタマイズできます。私の目的が iOS 4、5、6 をサポートすることである場合、コードを使用してバーの外観をカスタマイズすることは理にかなっていますか?
私は基本的に、グラデーションのないナビゲーション バー、無地の色、丸みを帯びた角、および非常に細い影の線が必要です。以下に画像を投稿しますが、少なくとも10の評判ポイントが必要です:(
グラデーションなしと無地の問題に対処するために次のコードから始めました。クラス自体の @implementation の前に rootviewcontroller の .m ファイルにこれを配置しましたが、役に立ちませんでした。
@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
UIColor *color = [UIColor blueColor];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColor(context, CGColorGetComponents( [color CGColor]));
CGContextFillRect(context, rect);
}
@end
また、このコードを実装して角を丸くしました。これは機能します。
CALayer *capa = [self.navigationController navigationBar].layer;
[capa setShadowColor: [[UIColor blackColor] CGColor]];
[capa setShadowOpacity:0.85f];
[capa setShadowOffset: CGSizeMake(0.0f, 1.5f)];
[capa setShadowRadius:2.0f];
[capa setShouldRasterize:YES];
//Round
CGRect bounds = capa.bounds;
bounds.size.height += 10.0f; //I'm reserving enough room for the shadow
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:bounds
byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight)
cornerRadii:CGSizeMake(10.0, 10.0)];
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame = bounds;
maskLayer.path = maskPath.CGPath;
[capa addSublayer:maskLayer];
capa.mask = maskLayer;
この問題に関する助けをいただければ幸いです。