繁体   English   中英

UIPageViewController和AutoLayout:约束未正确应用

[英]UIPageViewController and AutoLayout: constraints are not applied correctly

我以编程方式创建一个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的视图中?

在此输入图像描述

在此输入图像描述

我必须以编程方式添加约束来解决问题。 请注意,我无法使用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()
}

我有同样的问题,它已通过在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)

我希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM