如何将 UIView 的大小调整为特定的高度和宽度,包括其子视图?

Posted

技术标签:

【中文标题】如何将 UIView 的大小调整为特定的高度和宽度,包括其子视图?【英文标题】:How to resize a UIView to a specific height and width including its subviews? 【发布时间】:2018-03-09 06:51:54 【问题描述】:

我在尝试正确调整 UIView 大小时遇到​​问题。

下面的示例场景:

// other view controller initializations

let containerView = UIView(frame: CGRect(x:0, y:0, width: self.view.bounds.width, height: self.view.bounds.height))
self.view.addSubview(containerView)
view.autoresizingMask = [.flexibleWidth, .flexibleHeight]

let subView = UIView(frame: CGRect(x:0, y:0, width:containerView.bounds.size.width / 2, height: containerView.bounds.size.height))
containerView.addSubview(subView)
subView.autoresizingMask = [.flexibleWidth, .flexibleHeight]

假设我想将 containerView 调整为特定的高度和宽度,这样子视图也会与 containerView 并行调整自身的大小。

我怎样才能做到这一点?

【问题讨论】:

你可以设置subViews的高度和宽度锚点,而不是在构造函数中指定它 你的错误是什么?上面的代码工作完美。尝试分配两个视图的 backgroundColor 进行测试 最好的办法是自动布局... 你们能举一个例子 sn-p 或这个场景吗? 【参考方案1】:

别忘了为subView设置以下属性

subView.autoresizesSubviews = true;

根据Apple documentation

一个整数位掩码,用于确定接收器如何调整自身大小 当其父视图的边界发生变化时。

所以使用你的例子,它看起来像这样

let containerView = UIView(frame: CGRect(x:0, 
                                         y:0, 
                                         width: self.view.bounds.width, 
                                         height: self.view.bounds.height))

containerView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.view.addSubview(containerView)

let subView = UIView(frame: CGRect(x:0, 
                                   y:0, 
                                   width: containerView.bounds.size.width / 2, 
                                   height: containerView.bounds.size.height))

subView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
subView.autoresizesSubviews = true;
containerView.addSubview(subView)

【讨论】:

【参考方案2】:

我能够通过使用UIStackView 来实现我想要的。

let stackView = UIStackView(frame: .zero)
currentPage.addSubview(stackView)
constraintViewToSuperView(view: stackView) // my helper function to constraint stackview to bounds of parent

stackView.axis = .vertical
stackView.alignment = .fill
stackView.distribution = .fillProportionally
stackView.spacing = 1
stackView.backgroundColor = .red

关键是将UIStackview 限制在它的父级范围内。然后我对父母所做的任何调整大小也会按比例调整UIStackview 的孩子的大小。

【讨论】:

以上是关于如何将 UIView 的大小调整为特定的高度和宽度,包括其子视图?的主要内容,如果未能解决你的问题,请参考以下文章

为可调整大小的 UIView 设置最小和最大宽度和高度

如何将 UIView 框架自动调整为另一个 UIView 框架

获取浏览器视口的宽度和高度,无论内容大小如何且不调整为 100%?

ios uiview 自动展开尺寸

如何在保持宽高比的同时将图像调整为固定的宽度和高度?

如何在绘制之前获取调整大小的自定义视图的宽度和高度