ios - 使用 AutoLayout/UIScrollView 设置约束时了解 UIView 高度

标签 ios swift uiscrollview autolayout

我希望这个this graphic有帮助,但我正在尝试围绕一个概念进行思考。我有一个 UIScrollView,添加到我的 ViewController 中的 self.view,其顶部、前导、尾随和底部边缘固定到 self.view 的边缘。这是viewA

我有第二个 UIView,viewB,有几个 subview 。这些 subview 中的每一个都使用 AutoLayout 添加到 viewB,为了简洁起见,每个 subview 都有一个高度约束设置为一个值。

我想将 viewB 添加到 viewAviewA 可以垂直滚动。由于 viewB 无疑比 viewA 高,它应该滚动。

我正在像这样添加viewB

viewB.topAnchor.constraint(equalTo: viewA.topAnchor).isActive = true
viewB.leadingAnchor.constraint(equalTo: viewA.leadingAnchor).isActive = true
viewB.trailingAnchor.cosntraint(equalTo: viewA.trailingAnchor).isActive = true

这就是我卡住的地方。如果我设置底部 anchor (viewB.bottomAnchor.constraint(equalTo: viewA.bottomAnchor).isActive = true),我的 UIScrollView 不会滚动,并且 viewB 被明显剪切关闭。

如果我为 viewB 设置一个随机高度(使用 viewB.heightAnchor.constraint(equalToConstant: 2000.0).isActive = true),UIScrollView 会滚动,尽管这样常量太高了。

我很困惑如何为 viewB 获取合适的高度。由于 viewB 确实有一个实际高度(带有硬编码的 subview ),我认为 AutoLayout 没有理由不能计算 viewB 的高度,即使没有底部 anchor 设置,但无法找出正确的代码。

最佳答案

1- 你需要将 viewB leading , trailing , top 和 bottom Hook 到 viewA ,加上 viewB 的宽度设置 = 主 vc View 的宽度

2- viewB 中的所有约束都应该从上到下正确 Hook

3- 而不是重复使用 .isActive = true考虑将所有约束包装在 NSLayoutConstraint.activate([<#ConstraintsHere#>])

4- 可能是您当前的方法 UITableView比较合适

关于ios - 使用 AutoLayout/UIScrollView 设置约束时了解 UIView 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56307261/

相关文章:

ios - 应用程序关闭时从本地通知中选择表格 View 单元格

ios - XIB 未在 UIScrollView 中正确加载

ios - 滚动条滚动但 UIScrollView 不滚动

ios - 类型 'UITableViewCell' 的值在多个 TableView 中没有成员 'name'

iphone - 从命令行确定代码签名身份?

ios - 隐式转换丢失整数精度 : 'long long' to 'NSInteger' (aka 'int' )

iphone - 发布屏幕更改通知后,如何控制哪个UIAccessibilityElement获得焦点?

json - Swift 2 如何获取 JSON 值

cocoa - 停止/暂停 swift 应用程序一段时间

ios - 根据 UITableView 调整 UIScrollView 高度