2012-01-22 1 views
2

Будучи довольно опытным разработчиком iOS, я только начал работать над проектом OSX для настольных ПК в Cocoa, и у меня возникают проблемы, которые я просто не могу понять. Итак, этот вопрос для разработчиков OSX.Использует автосоциализацию или авторезистент Маскирование на настольных проектах плохо?

Мне не очень нравится интерфейс-конструктор, поэтому я предпочитаю писать свои представления в коде. Самый выдающийся метод, который я пишу, - это метод loadView контроллера вида, и по крайней мере на iOS Я использую autoresizingMask s для всего. Попробуйте взглянуть на маленький, большой, повернутый пейзаж и портрет, и если все денди, я продолжу следующий пункт в моем списке. Теперь на рабочем столе autoresizingMask работает (или просто выглядит) немного по-другому. Прежде всего свойства имеют разные имена, но их поведение также кажется странным или неожиданным.

Когда я столкнулся с проблемой ниже, я подумал, что это должен быть мой код был неправильным, поэтому, пройдя достаточно долго, я повторно создал его с помощью Interface Builder только для подтверждения, и угадайте, что: я получил то же самое результат. Возьмите представление с четырьмя вертикальными укладками. Установите средние два, чтобы иметь гибкую высоту, а внешние - фиксированные. Когда вы запустите его, измените размер и снова создайте резервную копию, я получаю два совершенно разных макета до и после изменения размера. Смотрите изображение:

enter image description here

Теперь я могу следовать, почему это происходит с математической точки зрения между петлями бежать, но с точки с «Autosizing» или функции «» автоматического изменения, это не имеет абсолютно никакого смысла.

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

  1. Неужели я дурак, не желающий использовать интерфейс-конструктор для проектов на рабочем столе?
  2. Должен ли я полагаться на autoresizingMask меньше, чем на проекты iOS?
  3. Каковы достойные альтернативы тому, чтобы ваш макет соответствовал стандартам без интерфейса Builder?

Cheers!

+0

Проблема заключается в вашем нелепо малом минимальном размере окна, а не в интерфейсе Builder. Не изменяйте размеры просмотров так, чтобы они были меньше 1 пикселя, не авторезистируйте. –

ответ

1
  1. Да, на мой взгляд. :)

  2. Вы должны зависеть от этого, когда оно делает то, что вам нужно. Когда этого недостаточно, переопределите resizeSubviewsWithOldSize: и/или resizeWithOldSuperviewSize: (или см. Ниже).

  3. ???

Если вы можете настроить таргетинг 10.7, посмотрите на новую систему компоновки на основе ограничений. Проверьте Какао Autolayout видео от WWDC 2011.

Вы также можете установить minSize на свой NSWindow на нечто достаточно большое, чтобы предотвратить сингулярность.

+0

Спасибо, Роб, особенно для видеоввода WWDC. Для других людей, сталкивающихся с этой проблемой, видеоролик Cocoa Autolayout 2011 года - номер 103. Я также рад видеть, что существует обширная альтернатива на основе кода, которая делает все в интерфейсе Builder. Я все еще не фанат :) – epologee

1
  1. Я не уверен, я бы сказал, «дурак», но отказывается использовать Interface Builder на Mac является очень ... Avante-авангардистов выбор.

  2. Вы должны обязательно использовать автоизоляцию на своих взглядах.

  3. Будьте маниакально внимательны и проводите много времени, убедившись, что все правильно. (Вот почему я не рекомендую идти без Interface Builder. В общем, что вы получите много потраченного времени, что вы могли бы потратили делать что-то другое.)

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

+0

Спасибо Чак, я должен был выбрать ответ, поэтому я пошел за Робом, но я согласен, что «авангард» звучит намного лучше :) – epologee