Как изменить размеры других подпредставлений и родительского представления при изменении размера одного подпредставления - PullRequest
5 голосов
/ 03 октября 2009

У меня есть вид, который похож на почтовое приложение. У меня есть представление прокрутки и во многих других подпредставлениях. Когда пользователь нажимает на любое текстовое представление, оно раскрывается, чтобы показать текст в нем. например поле "to" в почте. Я хотел бы изменить размеры других подпредставлений так, чтобы они начинались ниже расширенной области. Как мне это сделать.

Я создал вид через IB и пометил его для гибкого верхнего поля, чтобы облегчить это. Но ничего не происходит автоматически, и поэтому мне было интересно, нужно ли мне вызывать sizethatFits / setneedsLayout.

1 Ответ

7 голосов
/ 03 октября 2009

Когда размер подпредставления изменится, позвоните [[self superview] setNeedsLayout]. В вашем суперпредставлении внедрите -layoutSubviews, чтобы сделать фактический макет. Вам придется все самому подсчитать. Фиксированные / гибкие поля относятся к изменению размера суперпредставления, а не к одноранговым представлениям. Значение по умолчанию -layoutSubviews вообще ничего не делает; он просто вызывается в подходящее время.

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

...