Есть ли у NSView что-нибудь аналогичное UIView? s методы setNeedsLayout / layoutSubviews?

Можно найти FAQ C++ Marshall Cline полезный для того, что Вы пытаетесь выполнить.

28
задан ThinkingStiff 26 January 2013 в 22:35
поделиться

2 ответа

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

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

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

[view setNeedsLayout];

кажется таким же, как в NSView

view.needsLayout = YES;

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

1
ответ дан 28 November 2019 в 03:47
поделиться

Начиная с OSX 10.7:

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

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

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

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

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

13
ответ дан 28 November 2019 в 03:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: