Swift - 子视图在旋转时保持相同的位置

时间:2016-07-26 15:25:06

标签: ios objective-c swift

我有UIWebview,在其scrollView中我添加了多个子视图,为了论证,让我说我以纵向放在屏幕中间,当我将屏幕旋转到横向时,我希望我的子视图保持在那个固定的位置,所以如果一个位于屏幕中间,它应该在旋转时保留在屏幕中间。

我有这个:

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {

    for views in webview.scrollView.subviews {
        views.frame = CGRectMake(?, ?, views.frame.width, views.frame.height)
    }
}

到目前为止,子视图,宽度和高度保持不变。我只需要弄清楚如何计算,这样UIViews将保持在scrollView中的相同位置。有没有人有任何想法?

更新

添加子视图后我尝试了以下内容:

let widthConstraint = NSLayoutConstraint(item: stampView, attribute: .Width, relatedBy: .Equal,
                                         toItem: nil, attribute: .NotAnAttribute,
                                         multiplier: 1.0, constant: 250)

let heightConstraint = NSLayoutConstraint(item: stampView, attribute: .Height, relatedBy: .Equal,
                                          toItem: nil, attribute: .NotAnAttribute,
                                          multiplier: 1.0, constant: 100)

let xConstraint = NSLayoutConstraint(item: stampView, attribute: .CenterX, relatedBy: .Equal,
                                     toItem: self.webview.scrollView, attribute: .CenterX,
                                     multiplier: 1, constant: 0)

let yConstraint = NSLayoutConstraint(item: stampView, attribute: .CenterY, relatedBy: .Equal,
                                     toItem: self.webview.scrollView, attribute: .CenterY,
                                     multiplier: 1, constant: 0)

NSLayoutConstraint.activateConstraints([widthConstraint, heightConstraint, xConstraint, yConstraint])

一切都保持不变,子视图不在固定的位置。

我也尝试了以下内容:

let widthConstraint = NSLayoutConstraint(item: stampView, attribute: .Width, relatedBy: .Equal,
                                         toItem: nil, attribute: .NotAnAttribute,
                                         multiplier: 1.0, constant: 250)
stampView.addConstraint(widthConstraint)

let heightConstraint = NSLayoutConstraint(item: stampView, attribute: .Height, relatedBy: .Equal,
                                          toItem: nil, attribute: .NotAnAttribute,
                                          multiplier: 1.0, constant: 100)
stampView.addConstraint(heightConstraint)

let xConstraint = NSLayoutConstraint(item: stampView, attribute: .CenterX, relatedBy: .Equal,
                                     toItem: self.webview.scrollView, attribute: .CenterX,
                                     multiplier: 1, constant: 0)
self.webview.scrollView.addConstraint(xConstraint)

let yConstraint = NSLayoutConstraint(item: stampView, attribute: .CenterY, relatedBy: .Equal,
                                     toItem: self.webview.scrollView, attribute: .CenterY,
                                     multiplier: 1, constant: 0)
self.webview.scrollView.addConstraint(yConstraint)

仍然无效。

1 个答案:

答案 0 :(得分:0)

webView中的scrollView是webView的内部。向其添加子视图是不受支持的行为。它作为公共财产公开的唯一原因是because

  

如果想要自定义,您的应用可以访问滚动视图   滚动Web视图的行为。

如果您希望子视图具有固定位置w.r.t. webView,然后将两者都添加到同一个superview,并在两者之间设置约束。