Как найти самый большой размер представления, которое не делает окно больше, чем размер экрана? - PullRequest
0 голосов
/ 06 апреля 2020

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

Я знаю, что могу запросить количество доступное пространство экрана с помощью NSScreen: visibleFrame (), но это, кажется, не очень помогает, поскольку, если только я не сделаю целую загрузку предположений о том, сколько места займет остальная часть пользовательского интерфейса, что затем лишает смысла наличие макета пользовательского интерфейса на основе ограничений .

Другой подход может заключаться в том, чтобы найти способ ограничить размер окна, а затем позволить Какао определить размеры представлений. Однако, похоже, что редакторы пользовательского интерфейса в Xcode позволяют указывать только размеры stati c, что не очень помогает.

Похоже, что это возможно в SwiftUI (https://www.hackingwithswift.com/quick-start/swiftui/how-to-adjust-the-way-an-image-is-fitted-to-its-space )

Image("example-image")
   .resizable()
   .aspectRatio(contentMode: .fit)

Однако приложение, над которым я работаю, должно работать на более старых версиях MacOS, чем поддерживается SwiftUI, поэтому мне нужно знать, как это сделать быстро, но с использованием простого Cocoa.

1 Ответ

0 голосов
/ 07 апреля 2020

Первое, что я бы попробовал, это изменить приоритет ограничений, которые делают изображение достаточно большим, чтобы вместить его. Это будет его приоритет сжатия содержимого . Я думаю, если вы установите его на .dragThatCanResizeWindow, то вы можете получить поведение, которое вы хотите бесплатно. Это потому, что система уже ограничивает окно размером экрана при перетаскивании его краев. Таким образом, по-видимому, это неявное ограничение имеет более высокий приоритет, чем .dragThatCanResizeWindow.

Если этого не происходит, вы можете программно установить максимальный размер кадра окна, установив его maxSize свойство . Вы захотите установить это каждый раз, когда конфигурация экрана изменяется или окно перемещается на другой экран. Для первых вы можете наблюдать NSApplication.didChangeScreenParametersNotification. Для последнего ваш оконный делегат может реализовать windowDidChangeScreen(_:) или вы можете наблюдать NSWindow.didChangeScreenNotification.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...