ios - 子容器的约束
问题描述
我正在使用 View.addChild 方法添加子视图
包含视图显然是 350 像素。但是,子视图占用了包含视图的所有空间......所以我的想法是强制子视图小于其父视图......但我的代码不起作用。我可以告诉你,如果我取消注释这两行它几乎可以工作,但是子视图不会占据我想要的大小并且它会阻止其他元素。这是我的位置:
child.view.translatesAutoresizingMaskIntoConstraints = false
let safeArea = view.layoutMarginsGuide
//child.view.topAnchor.constraint(equalTo: tableContainer.topAnchor).isActive = true
// child.view.bottomAnchor.constraint(equalTo: tableContainer.bottomAnchor).isActive = true
child.view.leftAnchor.constraint(equalTo: tableContainer.leftAnchor).isActive = true
child.view.rightAnchor.constraint(equalTo: tableContainer.rightAnchor).isActive = true
child.view.heightAnchor.constraint(equalToConstant: 250).isActive = true
self.addChild(child)
让我说得很清楚,我的目标是让子视图达到 250 像素。谢谢你。
解决方案
您的解决方案可能看起来像这样。
child.view.translatesAutoresizingMaskIntoConstraints = false
let safeArea = view.layoutMarginsGuide
//Your left and right anchors tell the compiler exactly how wide the view should be.
//If you have it set to equal both then the view MUST be exactly the width of parent.
child.view.leftAnchor.constraint(equalTo: tableContainer.leftAnchor).isActive = true
child.view.rightAnchor.constraint(equalTo: tableContainer.rightAnchor).isActive = true
//Since you're defining your own height here you need to explicitly state where the
//view starts at. If you don't define a top, center, bottom or some other constraint
//it's impossible to know where to put the view.
child.view.heightAnchor.constraint(equalToConstant: 250).isActive = true
child.view.topAnchor.constraint(equalTo: safeArea.topAnchor).isActive = true
self.addChild(child)
这样做的原因是,在创建锚点时,您必须为所有视图都有一个 X 和 Y 锚点,即使在逻辑上也是如此。例如,如果您定义宽度为 100,高度为 100,您创建了一个正方形,但该正方形去哪里了?在该示例中,您没有 X 或 Y。但是,如果您使用左右锚定义宽度以匹配父视图,那么它仅通过左右锚就知道视图的宽度。相同的原理适用于顶部和底部锚。如果您定义了一个顶部和底部锚点,那么它将是视图的大小(假设您将它们设置为 equalTo)并且它将知道高度。
在您的实例中,您定义了 250 的高度,但它不知道从哪里开始。它是从顶部,中间,底部开始的,它没有线索,因为你没有设置它。IDE 非常具有约束力,并且没有任何晦涩难懂的内容。
推荐阅读
- typescript - 导出默认推断采取捷径
- r - R 错误:无法将类型“闭包”强制转换为“整数”类型的向量
- javascript - 尽管在组件内调用了 .catch,为什么没有作为道具传递的承诺
- android - 如何在 Y 轴上平移 SurfaceView 或为其设置负边距?
- macos - SwiftUI:在最小值和最大值之间改变值的放大手势
- c# - LINQ 将数组与 DataRow 中的另一个数组匹配
- javascript - 我可以使用 javascript 在我的 html 文档中抓取其他网站吗?
- javascript - 简单的香草 JS 游戏
- python - 具有嵌套循环的理解列表中的迭代计数器
- javascript - Puppeteer 无法拦截 xhr 响应 json