У меня есть UINavigationController
(NC), содержащий UITableViewController
(TVC0). Когда пользователь нажимает на строку, он загружает UIPageViewController
(PVC), который перемещается вперед и назад между другими UITableViewController
(TVC1).
TVC0 отображается внутри NC (это означает, что он не прячется за панелью навигации вверху или панелью вкладок внизу). Когда он нажимает PVC, первый TVC1 появляется внутри границ панели навигации и панели вкладок. Однако, когда я прокручиваю, TVC1 внутри скрыты за панелью навигации и панелью вкладок. Я могу потянуть, чтобы открыть содержимое, но когда отпускаю, оно снова оказывается за решеткой.
Как я могу заставить все появиться между двумя полосами? Я не могу использовать раскадровку (потому что это устаревшее приложение), а опция встраивания в... недоступна.
[Редактировать]
Я добавил логирование и обнаружил, что мой встроенный кадр TVC1s имеет абсолютное происхождение 0, 64, но как только я нажимаю, он переходит на 0, 0. Если я не могу найти реальное решение, я всегда могу подделать его. добавив 64, но я бы предпочел выяснить, что на самом деле не так.
[/Редактировать]
[Больше правок]
Я тестировал другую область в симуляторе iOS 6 и обнаружил, что этот пейджинг работает безупречно в iOS 6. Таким образом, проблема, которую я вижу, специфична для iOS 7.
[/Еще править]
Вот мой TVC0 viewDidLoad
, PVC pageViewController:viewControllerBeforeViewController:
и помощник viewControllerAtIndex:
:
- (void) viewDidLoad
{
[super viewDidLoad];
NSDictionary* options = [NSDictionary dictionaryWithObject:
[NSNumber numberWithInteger: UIPageViewControllerSpineLocationMin]
forKey:
UIPageViewControllerOptionSpineLocationKey];
self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:
UIPageViewControllerTransitionStyleScroll
navigationOrientation:
UIPageViewControllerNavigationOrientationHorizontal
options: options];
self.pageController.dataSource = self;
self.pageController.view.frame = self.view.frame;
NSArray* viewControllers =
[NSArray arrayWithObject: [self viewControllerAtIndex: self.initialIndex]];
[self.pageController setViewControllers: viewControllers
direction: UIPageViewControllerNavigationDirectionForward
animated: NO
completion: nil];
[self addChildViewController: self.pageController];
[self.view addSubview: self.pageController.view];
[self.pageController didMoveToParentViewController: self];
for (UIGestureRecognizer* recognizer in self.pageController.gestureRecognizers)
{
if ([recognizer isKindOfClass: [UITapGestureRecognizer class]])
{
recognizer.enabled = NO;
}
}
}
// SearchResultsList is TVC1
- (SearchResultsList*) viewControllerAtIndex: (NSUInteger) index
{
if (index >= self.items.count)
{
return nil;
}
SearchResultsList* retVal = [[SearchResultsList alloc]
initWithNibName: @"SearchResultsList" bundle: nil];
MyListItem* myItem = [self.items objectAtIndex: index];
MyMatchesRequest* matches = [[MyMatchesRequest alloc] initWithItemId: myItem.itemId];
[matches execute: ^(MySearchResults* results)
{
retVal.tableData = [NSMutableArray arrayWithArray: results.items];
retVal.view.frame = self.view.frame;
retVal.myItem = myItem;
retVal.index = index;
self.title = myItem.displayText;
[[retVal tableView] reloadData];
}];
return retVal;
}
- (UIViewController*) pageViewController: (UIPageViewController*) pageViewController
viewControllerBeforeViewController: (UIViewController*) viewController
{
SearchResultsList* vc = (SearchResultsList*)viewController;
if (vc.index == 0)
{
[self.navigationController popViewControllerAnimated: YES];
return nil;
}
return [self viewControllerAtIndex: vc.index - 1];
}