gpt4 book ai didi

ios - UIPageViewController 转换 PageCurl 与 UIScrollView 错误的页面索引

转载 作者:行者123 更新时间:2023-11-29 12:33:06 25 4
gpt4 key购买 nike

发帖前我搜索了很多都没有成功:

我有 UIPageViewController,其中包含 UIViewController 数组和 PageCurl 作为过渡。

每个 UIViewController 都由 UIScrollViewUIWebView 组成。

加载内容后根据webview高度计算的滚动高度。

现在,当我加载 UIPageViewController 并开始在 UIViewController 之间导航时,无需滚动内容,一切正常。但是如果我滚动任何页面然后导航到下一页或上一页。它将重新显示同一页面,然后再次正常工作。

我在IOS7和IOS8上测试过:

UIPageViewController viewDidLoad 方法:

    self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
NSArray *viewControllers = [NSArray arrayWithObject:currentViewController];

[self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

self.pageController.doubleSided = NO;

[self addChildViewController:self.pageController];
[[self view] addSubview:[self.pageController view]];
[self.pageController didMoveToParentViewController:self];

View Controller webViewDidFinishLoad:

CGSize contentSize = aWebView.scrollView.contentSize;
webView.frame = CGRectMake(0, 312, contentSize.width, contentSize.height);
scrollView.contentSize = CGSizeMake(320.f, contentSize.height+60);

编辑 下面是UIPageViewController的viewControllerBeforeViewControllerviewControllerAfterViewController

的完整代码
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {

NSUInteger index = [(NewsDetailVC *)viewController index];
self.index = index;
NSLog(@"view before %i", index);
if (index <= 0) {
return nil;
}

index--;
currentViewController = [self viewControllerAtIndex:index];
return [self viewControllerAtIndex:index];

}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
NSUInteger index = [(NewsDetailVC *)viewController index];
NSLog(@"view after %i", index);

if (index >= self.newsList.count -1) {
return nil;
}
index++;
currentViewController =[self viewControllerAtIndex:index];
return [self viewControllerAtIndex:index];
}

编辑2上一页是一个包含 UITableView 的 UIViewController,当单击一个单元格时会将 Items 数组传递给 UIPageViewController 和选定的索引。currentViewController 的用途是因为我可以控制字体大小和当前 View 背景。UIPageViewController 父级是 UIViewController这是 viewControllerAtIndex 的代码:

- (NewsDetailVC *)viewControllerAtIndex:(NSUInteger)index {

NewsDetailVC *childViewController = [[UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"NewsDetailVC"];
childViewController.index = index;
childViewController.selectedNews = [self.newsList objectAtIndex:index ];
childViewController.selectedCategory = self.selectedCategory;
return childViewController;
}

最佳答案

我在使用 UIPageViewController 时遇到了同样的问题。

viewControllerAtIndex 中显示的索引似乎不太准确。

正如上面评论中提到的其他人,在这些情况下,您应该实现委托(delegate)方法 pageViewController:willTransitionToViewControllers

在这种方法中你应该做你的工作:

- (void)pageViewController:(UIPageViewController *)pageViewController
willTransitionToViewControllers:(NSArray *)pendingViewControllers {

if ([pendingViewControllers count] > 0) {
NSUInteger index = [(PageContentViewController *)
[pendingViewControllers objectAtIndex:0] pageIndex];

if (index == [yourArray count] - 1 || index == 0) {
[self loadContent];
} else {
[self doOtherStuff];
}
}
}

不知何故,* viewControllerAtIndex* 被调用了几次,让您很难找到索引,但在这种方法中,索引应该是准确的。

希望对您有所帮助!

关于ios - UIPageViewController 转换 PageCurl 与 UIScrollView 错误的页面索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27077819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com