Я использую расширенную панель навигации для своего приложения, увеличивая ее высоту на 30 пунктов. Чтобы сделать это, я подклассы UINavigationBar, вот мой CustomNavigationBar.m:Переход iOS с расширенной навигационной панелью
CGFloat CustomNavigationBarHeightIncrease = 30.f;
@implementation CustomNavigationBar
- (CGSize)sizeThatFits:(CGSize)size {
CGSize amendedSize = [super sizeThatFits:size];
amendedSize.height += CustomNavigationBarHeightIncrease;
return amendedSize;
}
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
[self initialize];
}
return self;
}
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self initialize];
}
return self;
}
- (void)initialize {
[self setTransform:CGAffineTransformMakeTranslation(0, -(CustomNavigationBarHeightIncrease))];
}
- (void)layoutSubviews {
[super layoutSubviews];
NSArray *classNamesToReposition = @[@"_UINavigationBarBackground"];
for (UIView *view in [self subviews]) {
if ([classNamesToReposition containsObject:NSStringFromClass([view class])]) {
CGRect bounds = [self bounds];
CGRect frame = [view frame];
frame.origin.y = bounds.origin.y + CustomNavigationBarHeightIncrease - 20.f;
frame.size.height = bounds.size.height + 20.f;
[view setFrame:frame];
}
}
}
@end
Затем в viewDidLoad контроллера зрения, я создал titleView свойство моего элемента навигации, как это:
self.navigationItem.title = @"";
UIImage* logoImage = [UIImage imageNamed:@"welcome"];
self.navigationItem.titleView = [[UIImageView alloc] initWithImage:logoImage];
self.navigationItem.titleView.contentMode = UIViewContentModeScaleAspectFill;
self.navigationItem.titleView.contentMode = UIViewContentModeBottom;
и рама моего titleView имеет высоту 80 пунктов.
Все работает нормально до тех пор, но у меня есть проблема, когда я меняю контроллер вида (изображение использует изменения между контроллерами представлений). Как только начинается анимация, нижняя часть моего изображения (и только мое изображение в titleView, а не вся панель навигации) обрезается моей дополнительной высотой, переход происходит правильно (ну, только с оставшимся битом) и как только он будет завершен, появится обрезанный бит нового изображения.
Надеюсь, это ясно, похоже, я не могу получить анимацию на добавочном бите навигационной панели, которую я добавил.
Спасибо за вашу помощь, я действительно не знаю с чего начать.
Будьте уверены, чтобы вызвать методы перед отображением экрана - в 'viewWillAppear' или' viewDidLoad'. – ChrisHaze