gpt4 book ai didi

macos - OSX : How do you allow user to resize window under auto layout?

转载 作者:行者123 更新时间:2023-12-03 16:26:46 26 4
gpt4 key购买 nike

我有一个 NSWindow,带有一些 View ,与自动布局约束 Hook 。

窗口看起来像这样...

Label - TextView - Label - TextView - Label - DatePicker

Label - TextView - Label - PopUp - Label - PopUp

弹出窗口的数据是通过绑定(bind)到核心数据获得的,因此直到运行时才知道这些值。我希望调整这些控件的大小以适应数据库中的值。

表面上,一切似乎都很好。但是,如果我最终在弹出控件中得到一个非常长的字符串,则该控件的大小会导致窗口的大小扩大。

我希望大小是动态的,并根据数据值而变化,但我希望约束仅限于窗口的大小。

但是,我希望用户能够调整窗口大小(如果他们想要使其更宽)。我只想让用户调整窗口大小(窗口大小将自动保存和恢复)。

如果我在窗口的主视图上设置拥抱值,我就明白了这一点,但这似乎也阻止了用户调整窗口的大小。如果我降低控件约束的优先级,我就无法获得我想要的大小和位置。

所以,基本上,我希望控件随着窗口大小的变化而变化,但我不希望窗口的大小发生变化,除非用户更改它。我怎样才能做到这一点?

谢谢!

最佳答案

您需要将 View 的内容拥抱和压缩阻力优先级更改为小于 NSLayoutPriorityWindowSizeStayPut (500)。

如果内容拥抱优先级高于该值,则窗口将无法调整到太大而导致这些 View 被拉伸(stretch)。如果压缩阻力优先级高于该值,则窗口将无法调整到太小而导致这些 View 被压缩。

您说“如果[您]降低控件约束的优先级,[您]将无法获得[您]想要的大小和位置”。嗯,什么打破了?即使内容拥抱和压缩阻力优先级降低,您也需要找到一种方法来实现您想要的目标。

您可能还想对 View 设置最小宽度限制,以防止窗口将它们压缩为空。总的来说,这些约束将确定窗口的最小尺寸(您可能确实想要)。

此外,您可能希望 View 之间的优先级不同,否则您会得到含糊不清和有些武断的结果。也就是说,如果用户缩小窗口,因此并不是所有内容都可以容纳,并且如果两个或多个 View 具有相同的压缩阻力优先级,则压缩将是任意的。随着进一步的改变,它甚至可能会令人不安地来回翻转。因此,您应该通过对压缩阻力优先级进行排序来有效地指定哪个应该首先压缩,然后是第二个等等。对于内容拥抱也是如此。

关于macos - OSX : How do you allow user to resize window under auto layout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28957850/

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