我正在寻找相对于superView的UIView大小。
视图需要在垂直和水平方向上以超视图为中心。
我想使用originalContentView因为iAd
@IBOutlet var WhiteBar: UIView!
WhiteBar.frame = CGRect(origin: MainView.center, size: CGSize(width: 280, height: 280))
答案 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
}