Cocoa Auto Layout и вид прокрутки

Я делаю что-то вроде представления инспектора свойств. Я использую Auto Layout с Custom Layout (явно устанавливая свойство фрейма) только на внешней панели. Позволь мне объяснить:

  • Каждая строка представления свойств инспектора реализуется InspectorPropertyCell, который использует только Autolayout.
  • Существует настраиваемый элемент управления StackPanel, который складывает ячейки и также использует авторазметку. С каждой группой связана панель стека. Группа 04 находится внутри группы 03. Обе складные.
  • Существует внешняя панель стека, которая объединяет все группы. Эта внешняя панель стека устанавливает высоту явно с помощью свойства фрейма.
  • Все это содержится внутри NSScrollView.

Смотрите изображение:

введите здесь описание изображения

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

Установив несколько точек останова в коде, я обнаружил, в чем проблема. Я просто не знаю, как это решить. Проблема в том, что пока вызывается проход updateConstraints (поскольку я вызываю -setNeedsUpdateConstraints), проход -layout не вызывается. Даже если я принудительно передаю макет, вызвав -layoutSubtreeIfNeeded, автоматический макет, похоже, не имеет эффекта, потому что высота некоторых ячеек, которые я установил на 0 (используя ограничение), когда я выполняю свертывание, по-прежнему равна 0 когда я раскрываюсь.

Проход макета вызывается снова, если я изменяю размер окна. Конечно, это неприемлемо.

Пожалуйста помоги!!! Я собираюсь полностью отказаться от Auto Layout и сделать собственный макет, используя только Layout...


person Danilo Carvalho    schedule 05.12.2012    source источник
comment
Мне нравится твой взгляд инспектора. :-)   -  person Wizard of Kneup    schedule 23.11.2017


Ответы (1)


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

person Danilo Carvalho    schedule 08.12.2012