导航控制器中的PageViewController ios中滚动问题的子视图控制器 导航控制器-父级 页面视图控制器-导航控制器的子级 DetailsViewController-要在PageViewController中显示的ViewController
My DetailsViewController包含scrollview,具有不同数据的DetailsViewController数组被传递到pageviewcontroller 问题在于,只有pageviewcontroller的第一个viewController显示在navigartionbar下,其scrollview正在工作 但其余部分被推到导航控制器下,scrollview不工作 第一幅图:第一个详细信息视图控制器工作正常 第二幅图:当我刷卡时,数据集中的下一个细节查看控制器。在这里,内容被推到导航栏下,而scrollview不起作用 在做了进一步的研究之后,我发现除第一个之外,detailsviewcontroller的其余部分的navigationcontroller属性为nil导航控制器中的PageViewController ios中滚动问题的子视图控制器 导航控制器-父级 页面视图控制器-导航控制器的子级 DetailsViewController-要在PageViewController中显示的ViewController,ios,swift2,uipageviewcontroller,Ios,Swift2,Uipageviewcontroller,My DetailsViewController包含scrollview,具有不同数据的DetailsViewController数组被传递到pageviewcontroller 问题在于,只有pageviewcontroller的第一个viewController显示在navigartionbar下,其scrollview正在工作 但其余部分被推到导航控制器下,scrollview不工作 第一幅图:第一个详细信息视图控制器工作正常 第二幅图:当我刷卡时,数据集中的下一个细节查看控制器。在这
//
// PagerViewController.swift
//
//
// Created by Admin on 13/07/16.
//
//
import UIKit
class PagerViewController: UIPageViewController {
var result = Array<SearchResult>();
var mainStoryBoard = UIStoryboard(name: "Main", bundle: nil);
var resultSet = [UIViewController]();
var currentIndex = 0;
// MARK: - Life cycle Methods
override func viewDidLoad() {
super.viewDidLoad();
dataSource = self;
delegate = self;
generateDatset();
let initialViewController = resultSet[currentIndex] ;
let viewControllers = NSArray(objects : initialViewController);
setViewControllers(viewControllers as? [UIViewController], direction: .Forward, animated: true, completion: nil);
self.navigationController!.edgesForExtendedLayout = .None;
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Dataset Initialisation
func generateDatset() {
for searchResult in result {
let viewController = mainStoryBoard.instantiateViewControllerWithIdentifier(Constants.STORYBOARDUIFIELDS.DETAILSVIEWCONTROLLER) as? DetailsViewController;
viewController?.searchResult = searchResult;
resultSet.append(viewController!)
}
}
}
// MARK: - UIPageViewControllerDataSource
extension PagerViewController : UIPageViewControllerDataSource {
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = resultSet.indexOf(viewController) else {
return nil;
}
let nextIndex = viewControllerIndex + 1;
guard resultSet.count > nextIndex else {
return nil;
}
currentIndex = nextIndex;
return resultSet[nextIndex];
}
func scrollToNext(viewControllers : UIViewController) {
setViewControllers([viewControllers], direction: .Forward, animated: true, completion: nil)
}
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = resultSet.indexOf(viewController) else {
return nil;
}
let previousIndex = viewControllerIndex - 1;
guard previousIndex >= 0 else {
return nil;
}
currentIndex = previousIndex;
return resultSet[previousIndex];
}
}
//
// DetailsViewController.swift
//
//
// Created by Admin on 13/07/16.
//
//
import UIKit
class DetailsViewController: UIViewController {
var searchResult : SearchResult? = nil;
@IBOutlet weak var ShoeImageView: UIImageView!
@IBOutlet weak var DnsItemCodeLabel: UILabel!
@IBOutlet weak var GeneralDetailsCollView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
//print(navigationController)
DnsItemCodeLabel.text = "\(searchResult!.DNS!) - \(searchResult!.ItemCode!)";
// converting base64encoded image into nsdata and then to ui image
let image = UIImage(data: NSData(base64EncodedString: searchResult!.Image!, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters)!)
ShoeImageView.image = image;
// Assigning source to CollectionView
GeneralDetailsCollView.dataSource = self;
print(navigationController)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
// MARK: - UICollectionViewDataSource
extension DetailsViewController : UICollectionViewDataSource {
// returns the number of items
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return (searchResult!.summaryItems?.count)!;
}
//return the cell for given position
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(Constants.STORYBOARDUIFIELDS.GENRAL_DETAILS_CELL, forIndexPath: indexPath) as! GeneralDetailsCell
if let data = searchResult?.summaryItems![indexPath.row] {
cell.TitleLable.text = data.Title!;
cell.ValueLabel.text = data.Value!;
}
return cell
}
}
//
//PagerViewController.swift
//
//
//由管理员于2016年7月13日创建。
//
//
导入UIKit
类PagerViewController:UIPageViewController{
var result=Array();
var mainStoryBoard=UIStoryboard(名称:“Main”,捆绑包:nil);
var resultSet=[UIViewController]();
var currentIndex=0;
//MARK:-生命周期方法
重写func viewDidLoad(){
super.viewDidLoad();
数据源=自我;
代表=自我;
generateDatset();
让initialViewController=resultSet[currentIndex];
让viewControllers=NSArray(对象:initialViewController);
setViewControllers(viewControllers为?[UIViewController],方向:。正向,动画:true,完成:nil);
self.navigationController!.edgesForExtendedLayout=.None;
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
//标记:-数据集初始化
func generatedataset(){
在结果中搜索结果{
将viewController=mainStoryBoard.instanceeviewcontrollerwhidentifier(Constants.STORYBOARDUIFIELDS.DETAILSVIEWCONTROLLER)设为?DETAILSVIEWCONTROLLER;
viewController?.searchResult=搜索结果;
resultSet.append(viewController!)
}
}
}
//标记:-UIPageViewControllerDataSource
扩展页控制器:UIPageViewControllerDataSource{
func pageViewController(pageViewController:UIPageViewController,viewControllerAfterViewController:UIViewController)->UIViewController{
guard let viewControllerIndex=resultSet.indexOf(viewController)else{
返回零;
}
设nextIndex=viewControllerIndex+1;
guard resultSet.count>nextIndex else{
返回零;
}
currentIndex=nextIndex;
返回结果集[nextIndex];
}
func scrollToNext(视图控制器:UIViewController){
SetViewController([ViewController],方向:。正向,动画:true,完成:nil)
}
func pageViewController(pageViewController:UIPageViewController,viewController预览控制器viewController:UIViewController)->UIViewController{
guard let viewControllerIndex=resultSet.indexOf(viewController)else{
返回零;
}
让previousIndex=viewControllerIndex-1;
guard previousIndex>=0其他{
返回零;
}
currentIndex=以前的索引;
返回结果集[previousIndex];
}
}
//
//DetailsViewController.swift
//
//
//由管理员于2016年7月13日创建。
//
//
导入UIKit
类详细信息ViewController:UIViewController{
var searchResult:searchResult?=nil;
@IBVAR ShoeImageView:UIImageView!
@IBVAR DnsItemCodeLabel:UILabel!
@IBOutlet弱变量GeneralDetailsCallView:UICollectionView!
重写func viewDidLoad(){
super.viewDidLoad()
//打印(导航控制器)
dnsitemcodelab.text=“\(searchResult!.DNS!)-\(searchResult!.ItemCode!)”;
//将Base64编码图像转换为nsdata,然后转换为ui图像
让image=UIImage(数据:NSData(base64EncodedString:searchResult!.image!,选项:NSDataBase64DecodingOptions.IgnoreUnknownCharacters)!)
ShoeImageView.image=图像;
//将源分配给CollectionView
GeneralDetailsCollView.dataSource=self;
打印(导航控制器)
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
}
//标记:-UICollectionViewDataSource
扩展详细信息ViewController:UICollectionViewDataSource{
//返回项目数
func collectionView(collectionView:UICollectionView,numberOfItemsInSection:Int)->Int{
返回(searchResult!.summaryItems?.count)!;
}
//返回给定位置的单元格
func collectionView(collectionView:UICollectionView,cellForItemAtIndexPath indexPath:NSIndexPath)->UICollectionViewCell{
让cell=collectionView.dequeueReusableCellWithReuseIdentifier(Constants.STORYBOARDUIFIELDS.GENRAL\u DETAILS\u cell,forIndexPath:indexPath)作为!GeneralDetailsCell
如果let data=searchResult?.summaryItems![indexPath.row]{
cell.TitleLable.text=data.Title!;
cell.ValueLabel.text=data.Value!;
}
返回单元
}
}
在父视图控制器中使用self.edgesForExtendedLayout=.None。它工作正常这在我身上发生过一次,所以当时我添加了一个普通的视图控制器,并使其成为NavigationViewController的根控制器。现在,我在这个ViewController中添加了PageViewController。然后一切都很顺利。简而言之,尽管将NavigationController作为父控件
self.edgesForExtendedLayout = .None
self.automaticallyAdjustsScrollViewInsets = false;
import UIKit
class ViewController: UIViewController,UIPageViewControllerDataSource,UIPageViewControllerDelegate {
var pageViewController:UIPageViewController?
var presentIndex = 0
override func viewDidLoad() {
super.viewDidLoad()
self.pageViewController = UIPageViewController.init(transitionStyle: UIPageViewControllerTransitionStyle.Scroll, navigationOrientation: UIPageViewControllerNavigationOrientation.Horizontal, options: nil)
self.pageViewController!.dataSource=self
let initialViewController:DetailViewController = self.giveRequiredViewController(1)
let viewControllerArray:NSArray = [initialViewController]
self.pageViewController?.setViewControllers(viewControllerArray as! [DetailViewController], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)
self.addChildViewController(self.pageViewController!)
self.view.addSubview((self.pageViewController?.view)!)
self.pageViewController?.didMoveToParentViewController(self)
self.view.backgroundColor=UIColor.blackColor()
self.navigationController?.navigationBar.barTintColor=UIColor.redColor()
// Do any additional setup after loading the view, typically from a nib.
}
override func viewWillLayoutSubviews() {
let frame = CGRectMake(0, 64, self.view.frame.width, self.view.frame.height-40)
self.pageViewController?.view.frame = frame
}
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
presentIndex = (viewController as! DetailViewController).index!
if presentIndex==0{
return nil
}
return self.giveRequiredViewController(presentIndex-1)
}
func giveRequiredViewController(index:NSInteger) -> DetailViewController {
let detailViewController = DetailViewController(nibName: "DetailViewController", bundle: nil)
detailViewController.index = index
return detailViewController
}
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
presentIndex = (viewController as! DetailViewController).index!
if presentIndex==1{
return nil
}
return self.giveRequiredViewController(presentIndex+1)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
import UIKit
class DetailViewController: UIViewController {
var index:NSInteger?
override func viewDidLoad() {
super.viewDidLoad()
if index==0{
self.view.backgroundColor=UIColor.blueColor()
}else{
self.view.backgroundColor = UIColor.grayColor()
}
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
self.automaticallyAdjustsScrollViewInsets = false;