(我希望瓷砖有意义......)我试图让我的NSWindow调整大小被它的内容“约束”,这是一个具有固定宽高比和底部间距的视图,如图片。
约束是,从ContextBackedView到superview,前导,尾随和顶部空间等于0,底部空间等于37,加上宽高比约束(418:263)
这是constraintsAffectingLayoutForOrientation
的输出(0x6000001217c0是窗口contentView)
NSLayoutConstraintOrientationHorizontal
<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:但我找不到让它可靠运行的方法(只调整宽度或高度调整很好但是当改变它们时它通常会破坏......)
有谁知道实现这个目标的方法?
答案 0 :(得分:0)
如果你向ContextBackedView
添加约束(Aspect Ration Constraint),乘数属性是你喜欢的宽高比(例如4:3),你应该能够实现你的目标想。
如果您通过IB构建此功能很简单 - 首先选择ContextBackedView
,然后右键单击带有线条图标的框,然后选择&#34;宽高比&# 34 ;.这将在调整大小后保持视图的当前宽高比。
如果您想以编程方式执行此操作,则必须考虑实例化并将NSLayoutConstraints
应用于NSViews
。我从来没有使用纵横比约束,但它应该是非常直接的。如果你想要一个代码示例让我知道我可以旋转一个:)