OSX: 如何允许用户在自动布局下调整大小 window?
OSX: How do you allow user to resize window under auto layout?
我有一个 NSWindow,有一些视图,与自动布局约束挂钩。
Window 看起来像这样...
Label - TextView - Label - TextView - Label - DatePicker
Label - TextView - Label - PopUp - Label - PopUp
弹出窗口的数据是通过绑定到核心数据获得的,因此直到运行时才知道这些值。我希望这些控件调整大小以适应数据库中的值。
从表面上看,一切似乎都很好。但是,如果我在弹出控件中得到一个非常长的字符串,该控件的大小会导致 window 的大小扩展。
我希望大小是动态的,并根据数据的值而变化,但我希望将约束限制在 window 的大小。
但是,我希望用户能够调整 window 的大小,如果他们想让它变宽的话。我只希望 window 由用户调整大小(window 大小将自动保存和恢复)。
如果我在 window 的主视图上设置拥抱值,我会有点明白,但这似乎会阻止用户也能够调整 window 的大小。如果我降低控件约束的优先级,则无法获得所需的大小和位置。
所以,基本上,我希望控件随着 window 大小的变化而变化,但我不希望 window 的大小发生变化,除非用户更改它。我怎样才能做到这一点?
谢谢!
您需要将您的视图的内容拥抱和抗压缩优先级更改为小于 NSLayoutPriorityWindowSizeStayPut
(500)。
如果内容拥抱优先级高于该优先级,那么 window 将无法调整到大到那些视图被拉伸的程度。如果抗压缩优先级高于该优先级,则 window 将无法调整到如此小以至于这些视图被压缩。
你说“[i]f [你] 降低控件约束的优先级,[你] 得不到[你] 想要的大小和定位”。好吧,什么打破了?你需要找到一种方法来实现你想要的,即使内容拥抱和压缩阻力优先级降低了。
您可能还想对视图设置最小宽度限制,以防止 window 将它们压缩为零。总的来说,这些限制将为您的 window(您可能 做 想要的)确定最小大小。
此外,您可能希望视图之间的优先级不同,否则您会得到模棱两可和有些武断的结果。也就是说,如果用户将 window 缩小,那么并非所有内容都适合,并且如果两个或多个视图具有相同的抗压缩优先级,那么将任意压缩。随着进一步的更改,它甚至会令人不安地来回翻转。因此,您应该通过排序抗压优先级来有效地指定首先压缩哪个,然后再压缩等等。内容拥抱也是如此。
我有一个 NSWindow,有一些视图,与自动布局约束挂钩。
Window 看起来像这样...
Label - TextView - Label - TextView - Label - DatePicker
Label - TextView - Label - PopUp - Label - PopUp
弹出窗口的数据是通过绑定到核心数据获得的,因此直到运行时才知道这些值。我希望这些控件调整大小以适应数据库中的值。
从表面上看,一切似乎都很好。但是,如果我在弹出控件中得到一个非常长的字符串,该控件的大小会导致 window 的大小扩展。
我希望大小是动态的,并根据数据的值而变化,但我希望将约束限制在 window 的大小。
但是,我希望用户能够调整 window 的大小,如果他们想让它变宽的话。我只希望 window 由用户调整大小(window 大小将自动保存和恢复)。
如果我在 window 的主视图上设置拥抱值,我会有点明白,但这似乎会阻止用户也能够调整 window 的大小。如果我降低控件约束的优先级,则无法获得所需的大小和位置。
所以,基本上,我希望控件随着 window 大小的变化而变化,但我不希望 window 的大小发生变化,除非用户更改它。我怎样才能做到这一点?
谢谢!
您需要将您的视图的内容拥抱和抗压缩优先级更改为小于 NSLayoutPriorityWindowSizeStayPut
(500)。
如果内容拥抱优先级高于该优先级,那么 window 将无法调整到大到那些视图被拉伸的程度。如果抗压缩优先级高于该优先级,则 window 将无法调整到如此小以至于这些视图被压缩。
你说“[i]f [你] 降低控件约束的优先级,[你] 得不到[你] 想要的大小和定位”。好吧,什么打破了?你需要找到一种方法来实现你想要的,即使内容拥抱和压缩阻力优先级降低了。
您可能还想对视图设置最小宽度限制,以防止 window 将它们压缩为零。总的来说,这些限制将为您的 window(您可能 做 想要的)确定最小大小。
此外,您可能希望视图之间的优先级不同,否则您会得到模棱两可和有些武断的结果。也就是说,如果用户将 window 缩小,那么并非所有内容都适合,并且如果两个或多个视图具有相同的抗压缩优先级,那么将任意压缩。随着进一步的更改,它甚至会令人不安地来回翻转。因此,您应该通过排序抗压优先级来有效地指定首先压缩哪个,然后再压缩等等。内容拥抱也是如此。