如何基于superView设置UIView大小

时间:2015-03-15 17:04:40

标签: ios swift uiview

我正在寻找相对于superView的UIView大小。

视图需要在垂直和水平方向上以超视图为中心。

我想使用originalContentView因为iAd

@IBOutlet var WhiteBar: UIView!    
WhiteBar.frame = CGRect(origin: MainView.center, size: CGSize(width: 280, height: 280))

3 个答案:

答案 0 :(得分:0)

在viewController中创建一个函数,该函数将视图,设置高度和设置宽度作为参数,并将以下NSLayoutConstraints添加到视图的超视图中。在您的视图已附加到超级视图后,您必须调用此函数,否则它将无效。

func center(v: UIView, width: CGFloat, height: CGFloat) {
    v.setTranslatesAutoresizingMaskIntoConstraints(false)
    v.superview?.addConstraints(
        [
            NSLayoutConstraint(
                item: v,
                attribute: .CenterX,
                relatedBy: .Equal,
                toItem: v.superview,
                attribute: .CenterX,
                multiplier: 1,
                constant: 0
            ),
            NSLayoutConstraint(
                item: v,
                attribute: .CenterY,
                relatedBy: .Equal,
                toItem: v.superview,
                attribute: .CenterY,
                multiplier: 1,
                constant: 0
            ),
            NSLayoutConstraint(
                item: v,
                attribute: .Height,
                relatedBy: .Equal,
                toItem: nil,
                attribute: .NotAnAttribute,
                multiplier: 1,
                constant: height
            ),
            NSLayoutConstraint(
                item: v,
                attribute: .Width,
                relatedBy: .Equal,
                toItem: nil,
                attribute: .NotAnAttribute,
                multiplier: 1,
                constant: width
            )
        ]
    )
}

答案 1 :(得分:0)

这是我的最终解决方案

我定义了宽度和高度,然后从超视图中心减去它。并将其加载到viewDidLayoutSubviews()

        var Width: CGFloat = 280
        var Height: CGFloat = 280
        WhiteBar.frame = CGRect(x: (self.originalContentView.center.x - (Width / 2)), y: (self.originalContentView.center.y - (Height / 2)), width: Width, height: Height)

这也会根据方向调整视图。

答案 2 :(得分:0)

您可以使用Autolayout(请参阅其他答案)或使用struts:要使用相对帧,最好使用 viewWillLayoutSubviews 。希望有所帮助。

override func viewWillLayoutSubviews() {
        customSubView.center.x = view.center.x
    }