2015-01-12 3 views
1

(Я надеюсь, что плитка имеет смысл ...) Я пытаюсь сделать изменение размера NSWindow «ограниченным» по содержанию, которое представляет собой представление с фиксированным соотношением сторон , и расстояние на дне, как на картинке.Изменить размер NSWindow с "полуфиксированным" соотношением сторон

screenshot

Ограничения есть, от 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'([email protected])] 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'([email protected])] 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

Он просто не изменяется ... –

+0

Ваш скриншот кажется затененным некоторыми ограничениями. Вы можете свернуть представление библиотеки объектов. Или объясните ограничения текста в вопросе или что-то еще. –

ответ

0

Если вы добавили ограничение (Aspect Ration Constraint) к вашему ContextBackedView, а свойство множителя - это соотношение сторон, которое вы хотели бы (например, 4: 3), вы сможете достичь того, чего хотите.

Это легко, если вы строите это через IB - сначала выберите свой ContextBackedView, а в правом нижнем углу щелкните мышью на поле с изображением линии и выберите «Соотношение сторон». Это будет поддерживать текущее соотношение сторон вашего представления после изменения размера.

Если вы хотите сделать это программно, вам нужно будет изучить экземпляр и применить NSLayoutConstraints на NSViews. Я никогда не делал этого с Aspect Ratio Constraints, но он должен быть довольно прямым. Если вы хотите, чтобы образец кода дал мне знать, я могу развернуть его :)

+0

Если вы посмотрите на скриншот, вы увидите, что я уже добавил это ограничение ... Проблема не в изменении размера представления, а в окне ... –

+0

О, извините, я просто сделал пример приложения и получил его для изменения размера; но не обращал внимания на ваш образ. Моя вина. Итак, что я получил, чтобы сделать пользовательский вид в качестве нижней панели, установить ограничение по высоте на этом, а затем установить верхнюю часть этого представления, чтобы ограничить расстояние 0 от нижней части верхнего вида. Я тоже дважды проверю –

+0

Я попытался поставить другой снимок внизу, вместо того чтобы оставить пустое пространство, но это, похоже, не имеет значения (если только нижняя панель не означает фактический бар, но я не мог найти способ сделайте это) –

Смежные вопросы