无法将 viewcontroller 的框架添加到另一个 viewcontroller 中的滚动视图

Cannot add viewcontroller´s frame to a scrollview in another viewcontroller

我想向我的应用程序添加滑动功能并在 viewcontroller 之间滑动,如本教程所示:https://www.youtube.com/watch?v=3jAlg5BnYUU 本教程的源代码在这里:https://www.veasoftware.com/posts/swipe-navigation-in-swift-xcode-7-ios-9-tutorial

在该指南中,他们使用 nib/xib 他们创建的文件以及相应的 viewcontroller,然后他们使用这些文件在 ViewController 的构造函数中调用。

我做的完全一样,而且和教程中的一样有效。但我也想使用没有 xib 文件的 ViewController,因为它在我的故事板上。 viewcontroller 在我下面的代码中被称为 ViewController2 ,它是我滑动时唯一没有出现在滚动视图中的代码。其他两个是因为我在构造函数调用中调用 xibName 但 ViewController2 没有 xib 文件,因为它在我的故事板上。

那么如何将它添加到滚动视图,以便在我滑动时显示它?

@IBOutlet weak var scrollView: UIScrollView!

override func viewDidLoad() {
    super.viewDidLoad()

    let vc0 = ViewController0(nibName: "ViewController0", bundle: nil)

    self.addChildViewController(vc0)
    self.scrollView.addSubview(vc0.view)
    vc0.didMoveToParentViewController(self)

    let vc1 = ViewController1(nibName: "ViewController1", bundle: nil)

    var frame1 = vc1.view.frame
    frame1.origin.x = self.view.frame.size.width
    vc1.view.frame = frame1

    self.addChildViewController(vc1)
    self.scrollView.addSubview(vc1.view)
    vc1.didMoveToParentViewController(self)

    let vc2 = ViewController2()

    var frame2 = vc2.view.frame
    frame2.origin.x = self.view.frame.size.width
    vc2.view.frame = frame2

    self.addChildViewController(vc2)
    self.scrollView.addSubview(vc2.view)
    vc2.didMoveToParentViewController(self)

    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width * 3, self.view.frame.size.height - 66);
}

尝试执行以下操作:

1) 以编程方式获取故事板对象。

2) 为情节提要文件中的 View Controller 2 提供情节提要 ID。您可以通过转到 Main.storyboard 文件并选择您希望提供标识符的视图控制器然后查看身份检查器(它应该在 "Identity" 部分下。

3) 使用情节提要方法 instantiateViewControllerWithIdentifier 实例化 View Controller 2 的实例。此方法使用故事板 ID 作为参数并将其添加为滚动视图的子项。

像这样:

@IBOutlet weak var scrollView: UIScrollView!

override func viewDidLoad() {
   super.viewDidLoad()
   //1
   let mainStoryboard = UIStoryboard.init(name: "Main", bundle: NSBundle.mainBundle())

   //3
   let vc2 = mainStoryboard.instantiateViewControllerWithIdentifier("<InsertStoryBoardID>") as! ViewController2
   self.addChildViewController(vc2)
   self.scrollView.addSubview(vc2.view)
   vc2.didMoveToParentViewController(self)

   self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width * 3, self.view.frame.size.height - 66);
}

希望对您有所帮助!欢迎提问!