Я помещаю такие вещи в метод отображения? Или есть что-то подобное?
Имеет ли NSView что-либо аналогичное методам UIView setNeedsLayout/layoutSubviews?
Ответ 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"? Это избавит вас от необходимости переполнения таких вопросов.