使用"半固定"调整NSWindow的大小纵横比

时间:2015-01-12 19:29:02

标签: objective-c macos swift autolayout

(我希望瓷砖有意义......)我试图让我的NSWindow调整大小被它的内容“约束”,这是一个具有固定宽高比和底部间距的视图,如图片。

screenshot

约束是,从ContextBackedView到superview,前导,尾随和顶部空间等于0,底部空间等于37,加上宽高比约束(418:263)

这是constraintsAffectingLayoutForOrientation的输出(0x6000001217c0是窗口contentView) NSLayoutConstraintOrientationHorizo​​ntal

<NSAutoresizingMaskLayoutConstraint:0x618000080af0 h=-&- v=-&- H:|-(0)-[NSView:0x6000001217c0]   (Names: '|':NSThemeFrame:0x1003060c0'Window' )>,
<NSAutoresizingMaskLayoutConstraint:0x618000080b40 h=-&- v=-&- H:[NSView:0x6000001217c0]-(0)-|   (Names: '|':NSThemeFrame:0x1003060c0'Window' )>,
<NSLayoutConstraint:0x618000080870 'NSWindow-current-width' H:[NSThemeFrame:0x1003060c0'Window'(418@500)] priority:500>

NSLayoutConstraintOrientationVertical

<NSAutoresizingMaskLayoutConstraint:0x618000080af0 h=-&- v=-&- H:|-(0)-[NSView:0x6000001217c0]   (Names: '|':NSThemeFrame:0x1003060c0'Window' )>,
<NSAutoresizingMaskLayoutConstraint:0x618000080b40 h=-&- v=-&- H:[NSView:0x6000001217c0]-(0)-|   (Names: '|':NSThemeFrame:0x1003060c0'Window' )>,
<NSLayoutConstraint:0x6000000828a0 H:[NSView:0x600000121860]-(0)-|   (Names: '|':NSView:0x6000001217c0 )>,
<NSLayoutConstraint:0x600000082990 H:|-(0)-[NSView:0x600000121860]   (Names: '|':NSView:0x6000001217c0 )>,
<NSLayoutConstraint:0x618000080870 'NSWindow-current-width' H:[NSThemeFrame:0x1003060c0'Window'(418@500)] priority:500>,
<NSAutoresizingMaskLayoutConstraint:0x618000080b90 h=-&- v=-&- V:[NSView:0x6000001217c0]-(0)-|   (Names: '|':NSThemeFrame:0x1003060c0'Window' )>,
<NSLayoutConstraint:0x6000000828f0 V:|-(0)-[NSView:0x600000121860]   (Names: '|':NSView:0x6000001217c0 )>,
<NSLayoutConstraint:0x600000082940 V:[NSView:0x600000121860]-(37)-|   (Names: '|':NSView:0x6000001217c0 )>,
<NSLayoutConstraint:0x6000000800f0 NSView:0x600000121860.width == 1.58935*NSView:0x600000121860.height>

使用自动布局,只有在我调整窗口宽度的大小时才有效,但如果我尝试更改窗口的高度则不行。 我不能使用 - [NSWindow setAspectRatio:]因为窗口的比例实际上不是一个固定的数字(由于底部空间必须保持不变)

我也尝试过使用-windowWillResize:toSize:但我找不到让它可靠运行的方法(只调整宽度或高度调整很好但是当改变它们时它通常会破坏......)

有谁知道实现这个目标的方法?

1 个答案:

答案 0 :(得分:0)

如果你向ContextBackedView添加约束(Aspect Ration Constraint),乘数属性是你喜欢的宽高比(例如4:3),你应该能够实现你的目标想。

如果您通过IB构建此功能很简单 - 首先选择ContextBackedView,然后右键单击带有线条图标的框,然后选择&#34;宽高比&# 34 ;.这将在调整大小后保持视图的当前宽高比。

如果您想以编程方式执行此操作,则必须考虑实例化并将NSLayoutConstraints应用于NSViews。我从来没有使用纵横比约束,但它应该是非常直接的。如果你想要一个代码示例让我知道我可以旋转一个:)