kwi*_*ver 4 uitableview uinavigationcontroller ios uipageviewcontroller
我有一个UINavigationController(NC)包含UITableViewController(TVC0).当用户点击一行时,它会加载一个UIPageViewController(PVC),它在其他UITableViewControllers(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];
}
Run Code Online (Sandbox Code Playgroud)
Nic*_*ick 14
我有类似行为的非常痛苦的学习经历:(
把它放在你的视图控制器的init中:
self.automaticallyAdjustsScrollViewInsets = NO;
Run Code Online (Sandbox Code Playgroud)
这是iOS 7 UIViewController中默认的新属性YES
| 归档时间: |
|
| 查看次数: |
4522 次 |
| 最近记录: |