Подтвердить что ты не робот

Имеет ли NSView что-либо аналогичное методам UIView setNeedsLayout/layoutSubviews?

Я помещаю такие вещи в метод отображения? Или есть что-то подобное?

4b9b3361

Ответ 1

Аналогично layoutSubviews является resizeSubviewsWithOldSize: методом NSView. Я думаю, что аналогично setNeedsLayout будет называть resizeSubviewsWithOldSize:[self frame].size напрямую.

Ответ 2

Как и OSX 10.7:

  • (void) макет эквивалентен layoutSubviews

Теперь существует идентичный setNeedsLayout.

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

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

Вы должны назвать [супер макет] частью вашей реализации.

Ответ 3

Иногда resizeSubviewsWithOldSize не вызывается. Затем попробуйте переопределить resizeWithOldSuperviewSize.

Ответ 4

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

NSView макет выглядит таким же, как UIView layoutSubviews. Они оба являются надёжными, если вы хотите выполнить специальную работу для замены или в дополнение к авторезистированию или автозапуску.

Вызов этого в UIView

[view setNeedsLayout];

похоже на это в NSView

view.needsLayout = YES;

Что вызывает вопрос, почему "setNeedsLayout" даже имя функции? Например, вы решили удалить параметр из функции setter и сохранить "set" в заголовке? Почему бы не "scheduleLayout"? Это избавит вас от необходимости переполнения таких вопросов.