3

MainstoryboardとSimulatorでは、ナビゲーションバーとボタンに無地の色が表示されます。しかし、実際のiPhoneまたはiPadで実行すると、この白いグラデーションが自分の色で得られます。それを削除する方法はありますか?

ここに画像の説明を入力してくださいiPhone画像 改善画像

4

1 に答える 1

10

iOS5以降では、プロトコルを使用して簡単にカスタマイズできます。すべてのViewControllerとUIElementsがこのプロトコルに準拠するようになりました。通常、UIViewには、 +(id)appearance または +(id)appearanceWhenContainedIn:(Class)ContainerClassのいずれかのUIAppearanceプロトコルにアクセスできる2つの異なるタイプのメソッドがあります。

最初の方法では、一度に1つのナビゲーションバーのみをカスタマイズできます。したがって、ナビゲーションバーのすべてのインスタンスをカスタマイズする場合は、使用します。

[[UINavigationBarの外観]setTintColor:myColor];

または、通常使用する位置と配置場所に基づいてナビゲーションバーをカスタマイズするように設定する場合は、

[[UINavigationBar appearanceWhenContainedIn:[UIViewController class], nil]
       setTintColor:myNavBarColor];

これにより、ViewController内にあるすべての既存のナビゲーションコントローラーが変更されます。

ただし、以前のios5では、特定のView Controllerのナビゲーションバーの色合いを設定する方がさらに簡単で、次のようなコード行にすぎません。

[self.navigationController.navigationBar setTintColor:[UIColor whiteColor]];

ただし、ナビゲーションコントローラーの一部ではなく、ビューコントローラーのみであるナビゲーションバーを作成する場合は、その出口を維持し、上記のようにカスタマイズします。

[self.navigationBar setTintColor:[UIColor violetColor]];

viewDidLoadで;

UIImage *backgroundImage = [self drawImageWithColor:[UIColor blueColor]];
 [self.navigationBar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];


-(UIImage*)drawImageWithColor:(UIColor*)color{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *imagePath;
    imagePath = [[paths lastObject] stringByAppendingPathComponent:@"NavImage.png"];
    if([fileManager fileExistsAtPath:imagePath]){
      return  [UIImage imageWithData:[NSData dataWithContentsOfFile:imagePath]];
    }
    UIGraphicsBeginImageContext(CGSizeMake(320, 40));
    [color setFill];
    UIRectFill(CGRectMake(0, 0, 320, 40));
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    NSData *data = UIImagePNGRepresentation(image);
    [data writeToFile:imagePath atomically:YES];
    return image;
}
于 2012-11-23T22:29:59.520 に答える