gpt4 book ai didi

ios - 具有自动布局的 UIScrollView 内部具有动态高度的容器 View

转载 作者:技术小花猫 更新时间:2023-10-29 10:13:16 24 4
gpt4 key购买 nike

我有一个 UIScrollView,嵌套在其中的一个内容 View 中,它嵌套了两个 subview ,一个具有已知高度的常规 UIView,以及一个具有动态高度的容器 View ,具体取决于内容。像这样:

Main View hierarchy

View 看起来像这样:

Main View

我的约束设置如下:

ScrollView 被限制在其父 View (即 View )的尾部、前部、顶部和底部边缘

内容 View 被限制在其父 View (即 ScrollView )的尾部、前部、顶部和底部边缘它还具有等于主视图(即 View )的宽度约束,因此 ScrollView 的宽度与屏幕宽度相同。

顶 View 被限制在其父 View (即内容 View )的前缘、后缘和上缘

容器 View 被限制在其父 View (内容 View )的尾部、前部和底部边缘它的上边缘也被限制在顶 View 的下边缘。

容器 View 的 View 层次结构如下所示:

Content View heirarchy

Content View

左上角标签被限制在其父 View 的后缘、前缘和上缘。右下角的标签被限制在其父 View 的尾部、前部和底部边缘。顶部标签对底部标签有垂直约束。为了我的测试(1000 点),我将这个垂直约束设置得特别大。

这应该为内容 View 提供约 1000 点的高度。

我的理解是容器 View 的高度现在已解析,内容 View 的大小将调整为顶部 View 的高度 + 容器 View 的高度。

但是 IB 提示如下:

IB

它想要调整 Container View 的大小并将其高度设置为 0。如果我给 Container View 一个明确的高度,那么一切都会按预期工作,但这不是我需要的,因为 Container View 可以根据它的动态变化内容大小。

感谢任何帮助!

最佳答案

我发现有两件事可以帮助我解决同一问题。

问题一:容器的高度

我希望容器 View 自行调整大小,但 IB 想要容器 View 的明确高度。由于 IB 对 View 的内容一无所知,因此它无法知道容器 View 的内容可以自行调整大小。最简单的方法是从容器 View 的大小检查器中设置一个 Placeholder Intrinsic Content Size:

Size Inspector

这有效地使 IB 高兴而无需应用任何高度限制。另一种选择是在容器上添加“在构建时删除”高度限制。

问题2: subview Controller View 的高度

subview Controller 的 Root View 默认使用 AutoresizingMask,这是任何 UIViewController 中最顶层 View 的标准。我的解决方案是在添加 subview Controller 时在 prepareForSegue 中禁用 AutoresizingMask。在 View Controller 中尝试以下操作:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)

if let childViewController = segue.destination as? ChildViewControllerClass {
childViewController.view.translatesAutoresizingMaskIntoConstraints = false
}
}

在父 View 中进行更改可确保如果在 UINavigationController 中的其他地方重新使用 subview ,则 View 的大小将正确调整。

在我进行更改之前,我不断收到与称为 UIView-Encapsulated-Layout-Height 的约束冲突的 AutoLayout 错误,我相信这是从 AutoresizingMask 派生的约束的名称> 基于根 UIViewController View 的布局。

关于ios - 具有自动布局的 UIScrollView 内部具有动态高度的容器 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27316628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com