среда, 8 января 2014 г.

Представьте ситуация когда ваше приложение имеет navigationController и пару окон в одно из которых отображение navigationBar-а не обезательно или даже нежелательно.


Я создал стандартный вид перехода от первого окна ко второму по средствам navigationController. Если скомпилировать проект мы увидим, что на первом окне уже появилась верхняя навигационная панель.



Теперь нам нужно добиться прозрачности навигационной панели в первом окне.
Для этого добавим следующий код в m файл нашего контроллера первого окна.
- (void)viewWillAppear:(BOOL)animated{
//прозрачный верхний бар
[self makeTransparentNavBar];
}
-(void) makeTransparentNavBar{
self.navigationController.navigationBar.translucent = YES;
const float colorMask[6] = {222, 255, 222, 255, 222, 255};
UIImage *img = [[UIImage alloc] init];
UIImage *maskedImage = [UIImage imageWithCGImage: CGImageCreateWithMaskingColors(img.CGImage, colorMask)];
[self.navigationController.navigationBar setBackgroundImage: maskedImage forBarMetrics:UIBarMetricsDefault];
//убираем тень
[self.navigationController.navigationBar setShadowImage: [[UIImage alloc] init]];
}
Сдесь я назначаю посути прозрачную картинку navigationBar-у и убираю тень. Вот как будет выглядеть первое окно при компиляции проекта, и ещё я добавил кнопку с помощью которой мы тоже осуществим переход на второе окно. Так же как и в случае с кнопкой Item я назначил ей push переход ко второму окну.

Во втором окне ситуация точно такая же. Верхняя панель прозрачная, но задача стоит спрятать навигационную панель только на первом окне. Для этого добавим следующий код в m файл второго контроллера:
- (void)viewWillAppear:(BOOL)animated{
//установим пустую картинку для панели
[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
}
В данном методе мы убираем картинку с заднего плана тем самым navigationController сам установит нам дефолтный задний план. Теперь уберём название с навигационной панели первого окна и кнопку Item

Теперь можете скомпилировать проект и посмотреть как выглядит первое и второе окно.

Комментариев нет:

Отправить комментарий