gpt4 book ai didi

swift - 为什么设置约束后无法再调整 NSWindow 的大小?

转载 作者:行者123 更新时间:2023-11-30 10:13:33 26 4
gpt4 key购买 nike

在自定义转场和自定义演示动画师之后,我设置了所演示 View 的约束。

let views = ["view" : childVC.view]
let horizontalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("H:|[view]|", options: [], metrics: nil, views: views)
let verticalConstraints = NSLayoutConstraint.constraintsWithVisualFormat("V:|[view]|", options: [], metrics: nil, views: views)
parentVC.view.addConstraints(horizontalConstraints)
parentVC.view.addConstraints(verticalConstraints)

当我打印出父/呈现 View Controller View 的约束时,只有这四个约束。现在我希望我的 subview 能够像 NSWindow 一样调整大小,但两者都不再调整大小了。

我也尝试了一下translatesAutoresizingMaskIntoConstraint = false,但我不太明白它。此外,它还会从 View 中删除所有内容。

那么我在这里缺少什么?

最佳答案

听起来您的 View 没有在内部使用自动布局。它依赖于旧的 Spring 和支柱模型。这就是为什么当您关闭 translatesAutoresizingMaskIntoConstraint 时,它会“删除所有内容”。更有可能的是, View 会折叠到零大小,因为不再有任何限制来保持其大小和位置。

当启用 translatesAutoresizingMaskIntoConstraint 时,会生成约束以将 View 保持在为其显式设置的最后一帧。如果其父 View 调整大小并且父 View 自动调整其 subview 的大小(这是默认设置),则 View 将根据其 autoresizingMask 调整大小。但自动布局有点不知道会发生这种情况。生成的约束使框架保持原样,直到 super View 发生变化。

但是您还在窗口的内容 View 和您的 View 之间添加了约束。这些约束有效地阻止了窗口调整大小,因为 View 的约束不允许布局系统调整它的大小。只有对其框架进行显式更改才能做到这一点。你有点陷入了第22条军规。如果父 View 调整大小, View 也会调整大小,但父 View 无法调整大小,因为 View 对其有不灵活的约束。

一般来说,当您使用的 View 保留有 translatesAutoresizingMaskIntoConstraint 时,您可以有效应用于该 View 的其他约束受到很大限制。您不能真正使用“插入” View 的框架或大小的约束。您只能松散地将其他 View “悬挂”到该 View 之外。

无论如何,您需要为您的 View 采用自动布局,或者只是不要在它和它的 super View 之间设置约束。相反,依赖自动调整大小机制。

关于swift - 为什么设置约束后无法再调整 NSWindow 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31529009/

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