Удалить белый градиент на панели навигации и кнопке

В Mainstoryboard и Simulator вы получаете простой цвет на панели навигации и кнопке. Но если вы запустите на реальном iPhone или iPad, вы получите этот белый градиент с вашим цветом. Есть ли способ удалить его.

введите описание изображения здесьИзображение iPhone Улучшенное изображение


person Programmer...    schedule 23.11.2012    source источник
comment
UINavigationBar по умолчанию должен быть одинаковым в Симуляторе и iPhone.   -  person allaire    schedule 24.11.2012
comment
Скорее всего, устройство, на котором вы тестируете, имеет iOS 6, а версия симулятора — iOS 5. По умолчанию панель навигации имеет белый градиент в iOS 6. Чтобы удалить его, вам просто нужно настроить панель навигации.   -  person Mazyod    schedule 24.11.2012
comment
Я использую xcode 4.5, который должен иметь симулятор ios6.   -  person Programmer...    schedule 24.11.2012
comment
Как мне настроить панель навигации, было бы неплохо, если бы был учебник....????   -  person Programmer...    schedule 24.11.2012


Ответы (1)


в ios5 и более поздних версиях вы можете легко настроить его с помощью протокола. Все контроллеры представления и элементы пользовательского интерфейса теперь соответствуют этому протоколу. Обычно в UIView есть два разных типа методов, которые могут получить доступ к протоколу UIAppearance: либо + (id)appearance, либо + (id)appearanceWhenContainedIn:(Class )ContainerClass.

С помощью первого метода вы можете настроить только одну панель навигации за раз. Итак, если вы хотите настроить все экземпляры панели навигации, которые вы будете использовать;

[[Вид UINavigationBar] setTintColor:myColor];

Или, если вы хотите настроить панель навигации в зависимости от ее положения и места, которое вы обычно используете,

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

Это изменит все существующие навигационные контроллеры внутри контроллера представления.

Но до ios5 еще проще установить цвет оттенка панели навигации для определенного контроллера представления, и это всего лишь строка кода, например;

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

Но, если вы создаете панель навигации, которая не является частью контроллера навигации, а просто контроллером представления, сохраните для нее выход и настройте ее, как указано выше, или,

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

В представленииDidLoad;

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;
}
person Sandeep    schedule 23.11.2012
comment
Теперь, если бы вы могли опубликовать код или отправить его, я мог бы посмотреть на него. - person Sandeep; 24.11.2012
comment
Белый градиент белый сверху, затем, когда вы спускаетесь вниз, вы получаете цвет, который вы выбираете для оттенка ... - person Programmer...; 25.11.2012
comment
Извините, я действительно не понимаю, что вы имеете в виду. Как показано на рисунке, у вас есть оттенок на панели навигации. Но теперь, что здесь означает белый градиент. - person Sandeep; 26.11.2012
comment
Хорошо, вы имеете в виду оттенок. Итак, вам просто нужен цвет плоскости над панелью навигации. - person Sandeep; 26.11.2012
comment
Это именно то, что я хочу…. - person Programmer...; 26.11.2012
comment
Я не думаю, что есть какие-либо методы для удаления градиента оттенка, если вы не используете для него фоновое изображение. Вас может заинтересовать - setBackgroundImage:forBarMetrics: если вы хотите полностью удалить градиент оттенка. - person Sandeep; 26.11.2012
comment
Хорошо, вы знаете какой-нибудь веб-сайт, где я получаю изображения… - person Programmer...; 26.11.2012
comment
Какого короля изображений вы хотите, простого синего цвета, какого цвета? Почему бы вам не создать простой образ самостоятельно. Подожди, я мог бы помочь тебе с этим. - person Sandeep; 26.11.2012
comment
Простой синий был бы хорош…. - person Programmer...; 26.11.2012
comment
Смотрите мою правку. Этот код поможет вам создать фоновое изображение с вашим собственным цветом. А также отключить тонировку. - person Sandeep; 26.11.2012
comment
Извините, я пытался сделать это в Photoshop, но это заняло у меня много времени. И теперь я нахожу это лучше, так как теперь вы можете изменить цвет на любой, который вам нравится. - person Sandeep; 26.11.2012
comment
Я разместил изображение, которое я получаю в симуляторе…. - person Programmer...; 27.11.2012
comment
С помощью этого редактирования вы сможете загрузить изображение, если оно уже сохранено на диске, а затем использовать то же изображение, в противном случае создать изображение, а затем использовать его и сохранить, и при последующем запросе оно будет использовать сохраненное изображение. - person Sandeep; 28.11.2012
comment
@insane-36 Потрясающая реализация, сэкономила мне столько часов +1. - person Satheesh; 05.08.2013