我有一个带有内部红色矩形(viewB)的绿色矩形(viewA)。如果我尝试修改viewA的维度,则viewB不会自动更改。
我试着:
所有这些解决方案都不起作用。
这是我的代码:
@IBOutlet weak var viewA: UIView!
@IBOutlet weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func buttonAction(_ sender: Any) {
viewA.autoresizesSubviews = true
self.viewA.autoresizingMask = [.flexibleWidth, .flexibleHeight,.flexibleTopMargin, .flexibleLeftMargin, .flexibleRightMargin, .flexibleBottomMargin]
viewA.bounds = CGRect(x: 0, y: 0, width: 100, height: 100) // or frame instead of bounds
}
感谢大家。
修改
我在故事板中添加了两个视图。在这里你还可以看到viewB的约束。
答案 0 :(得分:1)
不要混淆视图的框架和自动布局,两者的行为都不同。
您需要执行以下操作。
viewA的约束
viewB的约束
现在您需要为需要修改的约束(viewA)创建@IBOutlet
。
@IBOutlet weak var const_height_viewA: NSLayoutConstraints!
因此,在按钮单击时,您只需要更改约束的常量。
@IBAction func buttonAction(_ sender: Any) {
const_height_viewA.constant = 250
//changing height constraint of viewA will automatically updates viewB frame.
}
注意:无需修改viewB的约束,因为它会根据给定的约束自动调整。
图示参考
答案 1 :(得分:0)
如果您使用的是AutoLayout,则不应更改框架。如果您使用的是AutoLayout,最好将约束更新为您想要的值,而不是更改框架。
请注意docs中的“经验法则”部分中的第一个点。