xcode - 无法将 View Controller 的框架添加到另一个 View Controller 中的 ScrollView

标签 xcode swift uiviewcontroller swipe

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

在该指南中,他们使用 nib/xib 文件,这些文件与相应的 View Controller 一起创建,然后在 ViewController 的构造函数中调用这些文件。

我做了完全相同的事情,并且与教程中的一样有效。但我还想使用没有 xib 文件的 ViewController,因为它位于我的 Storyboard上。在我下面的代码中,该 View Controller 称为 ViewController2,它是我滑动时唯一不会出现在 ScrollView 中的 View Controller 。另外两个这样做是因为我在构造函数调用中调用了 xibName,但 ViewController2 没有 xib 文件,因为它位于我的 Storyboard上。

那么如何将它添加到 ScrollView 中,以便在我滑动时它会出现?

@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) 以编程方式获取 Storyboard对象。

2) 为 Storyboard文件中的 View Controller 2 提供 Storyboard ID。您可以通过转到 Main.storyboard 文件并选择您想要提供标识符的 View Controller ,然后查看身份检查器(它应该位于“身份”部分下。enter image description here

3) 使用 Storyboard方法 instantiateViewControllerWithIdentifier 实例化 View Controller 2 的实例。此方法使用 Storyboard ID 作为参数,并将其添加为 ScrollView 的 subview 。

像这样:

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

希望这有帮助!欢迎提问!

关于xcode - 无法将 View Controller 的框架添加到另一个 View Controller 中的 ScrollView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37767929/

相关文章:

ios - 如何通过 AppDelegate 升级使功能可用于大于 8 的 iOS

iphone - 我有一个选项卡式 View ,如何触发该 View 来运行一些由选项卡式 View 激活的代码?

ios - dismissViewControllerAnimated : completion: happens instantly unless I kludge it

iphone - Xcode "Use of undeclared identifier"

ios - swift 4 "This class is not key value coding compliant"

ios - 滚动到 TableView 的最后一个元素需要太多时间

ios - 静态库 iOS 中的弱链接

ios - 使用 Firebase Analytics 事件记录 OneSignal 推送通知

swift - 从导航 Controller 回到 View Controller ?

ios - Swift - 防止 UIViewController 中的返回事件