无法将viewcontroller的框架添加到另一个viewcontroller中的scrollview

时间:2016-06-11 19:48:14

标签: xcode swift uiviewcontroller swipe

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

在该指南中,他们使用的nib/xib文件与相应的视图控制器一起创建,然后用于在ViewController的构造函数中调用它们。

我做的完全一样,并且正如本教程中所做的那样。但我也想使用一个没有xib文件的ViewController,因为它在我的故事板上。在我的代码中,该viewcontroller被称为ViewController2,它是我滑动时唯一不会出现在scrollview中的。另外两个是因为我在构造函数调用中调用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 个答案:

答案 0 :(得分:1)

尝试执行以下操作:

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

2)为故事板文件中的View Controller 2提供故事板ID。您可以转到Main.storyboard文件并选择要提供标识符的视图控制器,然后查看Identity Inspector(它应位于“Identity”部分下面。enter image description here

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);
}

希望这有帮助!随意提问!