无法将 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);
}
希望对您有所帮助!欢迎提问!
我想向我的应用程序添加滑动功能并在 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);
}
希望对您有所帮助!欢迎提问!