如何根据superView设置UIView大小
How to set UIView size based on superView
我正在寻找相对于 superView 的 UIView 的大小。
视图需要在父视图的垂直和水平方向上居中。
因为 iAd,我想使用 originalContentView
@IBOutlet var WhiteBar: UIView!
WhiteBar.frame = CGRect(origin: MainView.center, size: CGSize(width: 280, height: 280))
在您的 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
)
]
)
}
这是我的最终解决方案
我定义了宽度和高度,然后从父视图中心减去它。并将其加载到 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)
这也会根据方向调整视图。
您可以使用 Autolayout(参见其他答案)或使用 struts:要使用相对框架,最好使用 viewWillLayoutSubviews。希望对您有所帮助。
override func viewWillLayoutSubviews() {
customSubView.center.x = view.center.x
}
我正在寻找相对于 superView 的 UIView 的大小。
视图需要在父视图的垂直和水平方向上居中。
因为 iAd,我想使用 originalContentView
@IBOutlet var WhiteBar: UIView!
WhiteBar.frame = CGRect(origin: MainView.center, size: CGSize(width: 280, height: 280))
在您的 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
)
]
)
}
这是我的最终解决方案
我定义了宽度和高度,然后从父视图中心减去它。并将其加载到 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)
这也会根据方向调整视图。
您可以使用 Autolayout(参见其他答案)或使用 struts:要使用相对框架,最好使用 viewWillLayoutSubviews。希望对您有所帮助。
override func viewWillLayoutSubviews() {
customSubView.center.x = view.center.x
}