Представление UINavigationController в пользовательском модальном

Я пытаюсь представить UINavigationController из UINavigationController. Я использую новый элемент iOS 7 transitioningDelegate, и он отлично работает … за исключением того, что панель навигации начинает высокий, а затем сжимается, когда анимация закончена. Я предполагаю, что он сжимается, потому что панель не касается верхней части экрана, но почему она начинается с высокой? Могу ли я предотвратить это?

Обратите внимание, что панель начинается с высоты

Вот код анимации:

- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext { UIViewController* fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; UIViewController* toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; UIView* containerView = [transitionContext containerView]; if (toViewController.isBeingPresented) { [self presentModalView:toViewController.view fromView:fromViewController.view inContainerView:containerView withTransitionContext:transitionContext]; } else { [self dismissModalView:fromViewController.view fromView:toViewController.view withTransitionContext:transitionContext]; } } - (void)presentModalView:(UIView*)modalView fromView:(UIView*)presentationView inContainerView:(UIView*)containerView withTransitionContext:(id<UIViewControllerContextTransitioning>)transitionContext { [containerView addSubview:modalView]; presentationView.userInteractionEnabled = NO; modalView.layer.cornerRadius = 5; modalView.clipsToBounds = YES; CGRect finalFrame = CGRectInset(presentationView.frame, 10, 20); modalView.frame = CGRectOffset(finalFrame, 0, CGRectGetHeight(presentationView.frame)); [UIView animateWithDuration:animationDuration animations:^{ modalView.frame = finalFrame; presentationView.alpha = 0.2; } completion:^(BOOL finished) { [transitionContext completeTransition:YES]; }]; } 

One Solution collect form web for “Представление UINavigationController в пользовательском модальном”

У меня есть решение этой проблемы.

С http://blog.jaredsinclair.com/post/61507315630/wrestling-with-status-bars-and-navigation-bars-on-ios-7 , номер 4:

UINavigationController будет изменять высоту своего UINavigationBar до 44 пунктов или 64 точки, в зависимости от довольно странного и недокументированного набора ограничений. Если UINavigationController обнаруживает, что верхняя часть его ракурса визуально смежна с вершиной UIWindow, тогда он рисует свою навигационную панель высотой 64 точки. Если верх его представления не соприкасается с вершиной UIWindow (даже если он выключен только одной точкой), тогда он рисует свою навигационную панель «традиционным» способом с высотой 44 точки. Эта логика выполняется UINavigationController, даже если несколько дочерних элементов находятся внутри иерархии контроллера представления вашего приложения. Невозможно предотвратить такое поведение.

Поэтому ваша проблема заключается в том, что UINavigationController обнаруживает, что кадр его представления смежен с вершиной UIWindow в начале анимации. Это связано с тем, что когда вы добавили modalView в качестве подчиненного элемента containerView , кадр modalView равен {0,0,0,0}. Поскольку этот кадр будет визуально смежным с вершиной UIWindow , UINavigationController рисует свой UINavigationBar с высотой 64 точки. Когда анимация завершена, новый кадр навигационного контроллера больше не является непрерывным с верхним окном, и он рисует навигационную панель высотой 44.

Одним из решений является добавление вида контроллера навигации в представление контейнера ПОСЛЕ установки его кадра. Вот так,

  - (void)presentModalView:(UIView*)modalView fromView:(UIView*)presentationView inContainerView:(UIView*)containerView withTransitionContext:(id<UIViewControllerContextTransitioning>)transitionContext { presentationView.userInteractionEnabled = NO; modalView.layer.cornerRadius = 5; modalView.clipsToBounds = YES; CGRect finalFrame = CGRectInset(presentationView.frame, 10, 20); modalView.frame = CGRectOffset(finalFrame, 0, CGRectGetHeight(presentationView.frame)); [containerView addSubview:modalView]; [UIView animateWithDuration:animationDuration animations:^{ modalView.frame = finalFrame; presentationView.alpha = 0.2; } completion:^(BOOL finished) { [transitionContext completeTransition:YES]; }]; } 

Это должно решить вашу проблему, поскольку панель навигации всегда будет рисоваться с высотой 44 точки в анимации. Я не знаю, как сохранить высоту навигационной панели 64 точки, потому что это связано с запугиванием навигационного контроллера, считая, что оно смежно с верхней частью окна.

  • Панель навигации с разными цветами в каждом представлении-контроллере, таком как Twitter (не с setbartintcolor)
  • Название заголовка навигационной панели и кнопки обратной кнопки одинаковы?
  • почему этот код использует presentModalViewController? (не pushViewController)
  • Использование делегата для передачи данных для резервного копирования стека навигации
  • Как изменить сокращенное название кнопки?
  • Постоянный UIBarButtonItem в UINavigationController
  • добавление UISearchBar в UICollectionviewController, встроенное в NavigationController IOS6
  • Добавьте тот же UIBarButtonItem к нескольким UIViewControllers
  • Автоматически устанавливать начальный viewController в навигационном контроллере (Layer SDK)
  • hidesBackButton / setHidesBackButton не работает
  • Получите определяемый раскладкой UINavigationController из AppDelegate
  • Interesting Posts

    Столкновение, не работающее на iphone, просто ipad Xcode 6.1.1

    Как показать элементы управления MPMoviePlayerController?

    IOS: методы делегата tableview для двух табличных представлений

    Как создать CABasicAnimation для нескольких свойств?

    Проверьте медленное подключение к Интернету iOS

    Xcode IB: UIButton скрыт, но все еще имеет кнопки

    height auto на родительском и переполнении-y прокрутки на дочернем, div не изменяя размер. (выскакивать)

    Передайте событие касания UICollectionView к его родительскому UITableViewCell

    Как спрятать определенные ячейки в статическом UItableview, быстро?

    addObject заменяет предыдущий объект в NSMutableArray

    Удаление пустого пространства, если заголовок раздела скрыт в UICollectionView

    Как проверить приложение на моем iPhone без лицензии Apple Developer?

    Как правильно подклассифицировать UIControl?

    Отключить UIWebView DiskImageCache

    Способ просмотра журналов сбоев для приложения iOS за пределами сеанса отладки Xcode?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.