2015-03-10 2 views
2

У меня есть NSWindow с некоторыми видами, связанными с ограничениями автоматической компоновки.OSX: Как вы разрешаете пользователю изменять размер окна в автоматическом макете?

окно выглядит примерно так ...

Label - TextView - Label - TextView - Label - DatePicker 

Label - TextView - Label - PopUp - Label - PopUp 

Данные для всплывающих окон получают с помощью привязки к основным данным, поэтому значения не известны до момента выполнения. Я хочу, чтобы эти элементы управления изменялись в соответствии с значениями из базы данных.

На первый взгляд все кажется прекрасным. Однако, если у меня получится очень длинная строка во всплывающем элементе управления, размер этого элемента управления расширит размер окна.

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

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

Мне кажется, что если я установил значение обнимания в главном окне окна, это, по-видимому, не позволяет пользователю изменять размер окна. Если я уменьшу приоритет ограничений элементов управления, я не получаю размер и позиционирование, как я этого хочу.

Итак, в основном, я хочу, чтобы элементы управления изменялись с изменением размера окна, но я не хочу изменять размер окна, если пользователь не изменит его. Как я могу заставить это случиться?

Спасибо!

ответ

5

Вам необходимо будет изменить приоритеты обхода содержимого и сжатия в ваших представлениях ниже NSLayoutPriorityWindowSizeStayPut (500).

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

Вы говорите: «[i] f [вы] уменьшаете приоритет ограничений элементов управления, [вы] не получаете размер и позиционирование, как [вы] хотите его». Что ж, что ломается? Вам нужно будет найти способ достичь того, чего вы хотите, даже при уменьшении приоритетов в области обхода контента и сжатия.

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

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

+0

Мне пришлось играть с этим в течение длительного времени, чтобы заставить его работать. Ключом является то, что магическое значение 500, но мне пришлось столкнуться с большинством ограничений и дать им конкретные значения как для представлений, так и для ограничений.Он, наконец, делает то, что я хочу, поэтому я благодарен. Тем не менее, ДОЛЖНО быть лучшим способом сказать: «Не разрешайте автоматическому макету изменять размер представления, но пусть пользователь изменит размер представления и автоматически его выложит». В любом случае, спасибо за помощь. –

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