2010-08-14 4 views
1

Не удалось найти что-либо в сети об этом и задался вопросом, есть ли у кого-либо решение SO.Изменение размера NSView меньше, чем его subviews?

У меня есть NSView с несколькими подзонами, которые центрированы удалением левой и правой опорных точек. Когда я изменяю свое представление, программно или с помощью мыши, на меньшую ширину, чем подвид: он отталкивает их от центра. Кто-нибудь сталкивался с этим раньше и у вас есть решение?

EDIT: Я хочу, чтобы иметь возможность изменять размер моего представления до нулевой ширины. Причина в том, что представление фактически является частью разделенного представления, и я подключил кнопку, чтобы «свернуть» ее. Когда он обрушивается, все подзоны выталкиваются не по центру и не подвергаются повторной центровке при изменении размера представления, что фактически не сворачивает его.

+0

Почему вы хотите, чтобы родительский вид был меньше, чем его subviews? Просто включите их в размер, и со мной все будет в порядке. –

+0

Я обновил вопрос, чтобы объяснить, почему я хочу это сделать. –

ответ

1

Я решил свою проблему сейчас и думал, что поделюсь тем, что кто-то столкнется с этой проблемой в будущем.

Никакое количество игр с параметрами авторазбора или макетами просмотра в интерфейсе Builder, казалось, не позволяло моим подзонам отходить от центра. Мне удалось найти эту ссылку here и с этой страницы, совет:

Спрингс и распорок, как в настоящее время реализованы, не очень хорошего не ничего, кроме держать одну или обе стороны зрения " застрял "до ближайшего края . Любое центрирование поведение, разделение полученной/потерянной области между несколькими видами и т. Д. Должно быть сделано вручную.

Исходя из этого я отменяю setFrame: метода моего взгляда и положил вручную мои подвиды, используя свой метод setFrame:. Это отлично работает и дает мне результаты, которые я ищу.

+1

Не делайте этого в -drawRect :. Переопределить -setFrame: и/или -setFrameSize :, вызвать super, а затем вызвать свою процедуру разбивки. -drawRect: должен быть быстрым и легким, и вы не должны выполнять надписью в нем. –

+0

Просто подтянул соответствующий код, и я действительно переопределяю setFrame, как было предложено. Должно быть, изменил его после публикации этого ответа. Изменил мой ответ, чтобы отразить лучший совет. –

0

Существует такая же проблема с использованием NSSplitView, изменяя размеры здесь, когда один Subview будет меньше, чем Subview Subviews имеет смысл, например. с маленькими диаграммами в верхнем подсмотре и rss-ридером в нижнем подсмотре.

Если вы хотите показать только rss-считыватель в нижнем подзоне, вы можете «скрыть» верхнее подвью, но после изменения размера верхнего поднабора NSImageView не будет выкладываться так же, как в начале. Проверьте этот nib/xCode Project и следующие screenshot, чтобы увидеть это поведение.

Только workaroung должен переопределить функцию изменения размера, чтобы перестать уменьшаться.

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