如何设置UIView大小以匹配parrent而不受编程限制

Sei*_*ahi 9 uiview ios cgrect swift

这个问题听起来很容易但却让我发疯.我在IB中创建了一个名为iBag的白色视图,通过约束,它的大小取决于屏幕大小.

在此输入图像描述

现在我想以编程方式创建一个新的UIView,并通过此代码将iBag添加为具有相同大小和位置的子视图

let newView = UIView()
newView.frame =  (frame: CGRect(x: 0, y: 0, width: iBag.frame.width, height: iBag.frame.height))
newView.backgroundColor = UIColor.redColor()
iBag.addSubview(newView)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我也尝试了界限,但没有帮助.我可以使用约束来解决问题,但我想了解什么是错的.

Sha*_* Of 22

如此多的答案,没有人解释什么是错的.

我会尝试.您newView在自动布局引擎开始工作之前设置您的超级视图帧的帧以确定视图位置.所以,当你使用superviews's的帧时newView,你会使用初始帧,这在大多数情况下是不正确的.你有3种方法可以做正确的事情:为你使用自动布局(约束)newView,或者viewDidLayoutSubviewsnewView方法中设置框架(它在自动布局引擎结束时调用它,因此框架变为实际;注意这个方法可以被多次调用),或设置自动调整掩码newView


小智 21

试试这个:

Swift 1和2:

newView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
Run Code Online (Sandbox Code Playgroud)

Swift 3+:

newView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
Run Code Online (Sandbox Code Playgroud)

如果它不起作用,也是这样的:

iBag.autoresizesSubviews = true


Cja*_*jay 9

试试这个

subview.frame = parentView.bounds

subview.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]

parentView.addSubview(subview)