我正在使用Xcode 6并实现UIPageViewController我的应用程序.我遵循了appcoda的教程,除页面指示器外,一切正常.这是因为我无法设置UIPageViewController滚动的过渡样式.
从图形上看,当我点击它时PageViewController,标签显示View Controller而不是Page View Controller就像appcoda(见下图)

这就是我的样子:

是的,我的自定义类设置为:UIPageViewController在教程中.

以编程方式,我尝试设置过渡样式:
    self.pageViewController.transitionStyle = UIPageViewControllerTransitionStyle.Scroll
但它无法构建,告诉我它无法找到成员转换风格.我想指出的最后一个奇怪的事情是,如果我只是编写self.pageViewController.transitionStyle,它会成功构建,但它仍然使用Page CurlTransition.
谁能帮助我?我正在使用Swift,Xcode 6,并在iOS 8 SDK上进行开发.
Mic*_*lum 38
您收到错误,因为它transitionStyle是一个只读属性.如果要以编程方式设置页面控制器的过渡样式,则只能在使用以下方法初始化期间完成:
init(transitionStyle style: UIPageViewControllerTransitionStyle, navigationOrientation navigationOrientation: UIPageViewControllerNavigationOrientation, options options: [NSObject : AnyObject]!) { ... }
文档中的更多信息.
Mar*_*n D 31
由于没有人回答这个问题.问题是,当您在Container中创建UIPageViewController时,首先使用UIViewController创建容器,并且您可以看到控制器的选项.为了解决这个问题,你必须删除UIViewController,你可以在其中设置自定义UIPageViewController.然后从控件选择器拖动UIPageViewController并将嵌入segue从容器连接到该控制器,然后您可以设置自定义寻呼机控制器以及设置转换到滚动.
Cil*_*vet 26
required init?(coder aDecoder: NSCoder) {
    super.init(transitionStyle: .scroll, navigationOrientation: .horizontal, options: nil)
}
Div*_*iya 20
在ios 8 swift3中
override init(transitionStyle style: UIPageViewControllerTransitionStyle, navigationOrientation: UIPageViewControllerNavigationOrientation, options: [String : Any]? = nil) {
        super.init(transitionStyle: .scroll, navigationOrientation: .horizontal, options: options)
    }
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
Seb*_*ian 10
在最新的Swift中,所有其他解决方案都不能完全适用于我,特别是因为我的类也继承了UIPageViewControllerDataSource和UIPageViewControllerDelegate.
要将PageViewController转换设置为.Scroll,只需将这两个方法添加到您的类中:
override init(transitionStyle style: UIPageViewControllerTransitionStyle, navigationOrientation: UIPageViewControllerNavigationOrientation, options: [String : AnyObject]?) {
    super.init(transitionStyle: .Scroll, navigationOrientation: .Horizontal, options: options)
}
required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}
在Swift 2.0中以编程方式执行此操作的最简单方法(无子类化):
class PageViewController: UIPageViewController {
     override init(transitionStyle style: UIPageViewControllerTransitionStyle, navigationOrientation navigationOrientation: UIPageViewControllerNavigationOrientation, options options: [NSObject : AnyObject]!) {
          super.init(transitionStyle: .Scroll, navigationOrientation: .Horizontal, options: options) 
     }
}
这就是我在Swift 2.0中解决这个问题的方法
1.创建了一个类,它是UIPageViewController的子类
    import UIKit
    class OPageViewController: UIPageViewController {
        override init(transitionStyle style: UIPageViewControllerTransitionStyle, navigationOrientation: UIPageViewControllerNavigationOrientation, options: [String : AnyObject]?) {
           // Here i changed the transition style: UIPageViewControllerTransitionStyle.Scroll           
            super.init(transitionStyle: UIPageViewControllerTransitionStyle.Scroll, navigationOrientation: UIPageViewControllerNavigationOrientation.Horizontal, options: options)
        }
        required init?(coder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    }
我只是用它:D
pageController = OPageViewController()
pageController.dataSource = self
pageController.setViewControllers(NSArray(object: vc) as? [UIViewController], direction: .Forward, animated: true, completion: nil)
pageController.view.frame = CGRectMake(0, container.frame.origin.y, view.frame.size.width, container.frame.size.height);
Swift 5 & 4:只需将这 2 个函数放在您的页面视图 VC 中的 viewDidLoad() 之前
override init(transitionStyle style: UIPageViewController.TransitionStyle, navigationOrientation: UIPageViewController.NavigationOrientation, options: [UIPageViewController.OptionsKey : Any]? = nil) {
    super.init(transitionStyle: .pageCurl, navigationOrientation: .horizontal, options: nil)
}
required init?(coder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
小智 6
我知道这有点晚了,但我遇到了同样的问题并意识到它起源于我使用的是简单的UIViewController,即使我的自定义视图控制器类继承自UIPageViewController,显然xcode的图形菜单没有认识到它.
解决方案是在故事板中删除视图控制器并拖动PageViewController来替换它.这将具有带滚动选项的图形菜单.
这对我有用。因为如果我重写了transitionStyle的init,如果你在Storyboard的容器视图中设置了pageViewController,它就永远不会被调用。
required init?(coder aDecoder: NSCoder) {
        super.init(transitionStyle: .scroll, navigationOrientation: .horizontal, options: nil)
    }
| 归档时间: | 
 | 
| 查看次数: | 41387 次 | 
| 最近记录: |