Как установить, какой размер окна предпочтительнее, когда OS X увеличивает его?

В OS X окно «масштабирование» (двойной щелчок по зеленой кнопке окна / строке заголовка, начиная с Yosemite) должно расширять окно до его предпочтительного размера (больше, чем содержимое, но не максимально).

Контент в моем окне варьируется, поэтому идеальный размер неизвестен во время компиляции, но я могу вычислить его во время выполнения.

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

Как правильно указать OS X, какой размер окна (или содержимого окна) следует использовать при масштабировании?


person Kornel    schedule 05.08.2015    source источник


Ответы (1)


Когда пользователь увеличивает или уменьшает масштаб окна, окно отправляет своему делегату windowWillUseStandardFrame:defaultFrame: сообщение.

Первый аргумент — масштабируемое окно; второй — стандартная рамка по умолчанию, равная размеру экрана. Вы возвращаете предпочтительный («стандартный») кадр.

Если рама окна уже равна стандартной рамке, которую вы возвращаете, то окно уменьшится до предпочтительного размера пользователя (как они выразили, изменив его размер вручную). В противном случае окно приблизится к стандартной рамке.

Следствием этого является то, что если стандартная рамка изменяется между масштабами, окно будет масштабироваться в первый раз и снова увеличиваться (до новой стандартной рамки) во второй раз. Это поведение, которое вы могли бы ожидать, если бы размер содержимого менялся между масштабами.

person Peter Hosey    schedule 06.08.2015
comment
Предостережение: размер «стандартного кадра по умолчанию» равен размеру экрана или максимальному размеру окна, в зависимости от того, что меньше. Ограничения автомакета могут ограничить максимальный размер окна, и ограничение будет отражено в предоставленном фрейме. - person rob mayoff; 26.09.2020