簡體   English   中英

使用“半固定”寬高比調整NSWindow的大小

[英]Resize NSWindow with “semi-fixed” aspect ratio

(我希望該圖塊有意義。)我正在嘗試使NSWindow的大小受其內容“約束”,該內容是具有固定長寬比的視圖,底部具有一個間距,如圖中所示。

截圖

從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:但我找不到一種方法來使其可靠地工作(僅調整寬度或高度的大小是可以的,但同時更改兩者通常會損壞...)

有誰知道實現此目標的方法?

如果您向ContextBackedView添加約束(縱橫比約束),並且multiplier屬性是您想要的縱橫比(例如4:3),則您應該能夠實現所需的目標。

如果您是通過IB構建的,則很容易-首先選擇ContextBackedView ,然后在右下角單擊帶有線條圖標的框,然后選擇“縱橫比”。 調整大小后,這將保持視圖的當前縱橫比。

如果要以編程方式執行此操作,則必須考慮實例化NSLayoutConstraints並將其NSViews 我從未使用過寬高比約束來做到這一點,但是應該很簡單。 如果您想要一個代碼示例,請讓我知道我可以升級:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM