почему layoutSubviews НЕ может автоматически вызываться для представления, когда задан его фрейм? - PullRequest
3 голосов
/ 27 октября 2011

У меня есть вид.Это часть большого и сложного проекта.Когда задан кадр моего вида, layoutSubviews не вызывается автоматически.

Играя с этим, я попытался добавить в свой вид следующий метод:

-(void) setFrame: (CGRect) frame {
    NSLog (@"setting frame");
    [super setFrame: frame];
    [self setNeedsLayout];
}

На этом этапе макетбыл переделан, когда был установлен кадр, как и ожидалось.И если я закомментировал строку setNeedsLayout, макет не был сделан.Кроме того, когда я нажимаю «перейти в» в строке, где вызывается super, отладчик не вступает ни во что.Итак, насколько я могу судить, метод setFrame в super не переопределяется.

FWIW, я также выполнил небольшой тестовый проект, в котором я изменил фрейм представления.В этом случае layoutSubviews был вызван, когда я это сделал.[setNeedsLayout не был вызван в моем тестовом проекте.] Так что что-то в моем большом проекте меняет поведение.Но я не знаю, что это за что-то.

Может кто-нибудь объяснить, что может происходить?

РЕДАКТИРОВАТЬ: чтобы уточнить, моя смена кадров меняет высоту вида.Ширина не изменяется.

...