我以编程方式创建UIPageViewController
并将其作为子项添加到我的容器视图控制器中,如下所示:
override func viewDidLoad() {
super.viewDidLoad()
self.pageViewController = UIPageViewController(transitionStyle:.PageCurl, navigationOrientation:.Horizontal, options: nil)
self.mainImageView!.userInteractionEnabled = true
self.pageViewController.delegate = self
self.pageViewController.dataSource = self.modelController
self.addChildViewController(self.pageViewController)
self.view.addSubview(self.pageViewController.view)
self.pageViewController.didMoveToParentViewController(self)
}
问题是UIPageViewController
的视图大小不正确,如下面的视图层次结构所示。 UIPageViewController
的数据源返回的视图控制器包含单个UIScrollView
。我已经设置了UIScrollView
的约束,以便scrollView扩展到superview。
在我看来,问题源于scrollView约束是"分离"从容器视图的约束,但我不知道如何使用StoryBoard修复它,因为这些是不同视图控制器中的视图。我不是很熟悉以编程方式指定约束,到目前为止,我以编程方式设置约束的努力都失败了。
如何解决此问题,以便UIPageViewController
的视图控制器的滚动视图正确包含在容器ViewController的视图中?
答案 0 :(得分:2)
我必须以编程方式添加约束来解决问题。请注意,我无法使用IB添加自动布局约束,因为我在这里处理属于IB中两个不同视图控制器的两个视图。视图以编程方式添加为子视图,因为它们是UIPageViewController
的视图。
override func viewDidLayoutSubviews() {
self.pageViewController.view.setTranslatesAutoresizingMaskIntoConstraints(false)
// Equal height constraint
let constraint = NSLayoutConstraint(item: self.mainImageView!, attribute: .Height, relatedBy: .Equal, toItem: self.pageViewController.view, attribute: .Height, multiplier: 1.0, constant: 0)
self.view.addConstraint(constraint)
// Equal width constraint
let constraint1 = NSLayoutConstraint(item: self.mainImageView!, attribute: .Width, relatedBy: .Equal, toItem: self.pageViewController.view, attribute: .Width, multiplier: 1.0, constant: 0)
self.view.addConstraint(constraint1)
// Equal top constraint
let constraint2 = NSLayoutConstraint(item: self.mainImageView!, attribute: .Top, relatedBy: .Equal, toItem: self.pageViewController.view, attribute: .Top, multiplier: 1.0, constant: 0)
self.view.addConstraint(constraint2)
self.view.layoutSubviews()
}
答案 1 :(得分:2)
我遇到了同样的问题,通过在viewDidLoad()
pageViewController!.view.setTranslatesAutoresizingMaskIntoConstraints(false)
let views = ["pageView": pageViewController!.view]
var constH = NSLayoutConstraint.constraintsWithVisualFormat("H:|[pageView]|", options: .AlignAllCenterY, metrics: nil, views: views)
view.addConstraints(constH)
var constW = NSLayoutConstraint.constraintsWithVisualFormat("V:|[pageView]|", options: .AlignAllCenterX, metrics: nil, views: views)
view.addConstraints(constW)
我希望能帮助别人。