layoutsubviews вызывается только один раз, несмотря на любое вращение устройства - PullRequest
2 голосов
/ 17 февраля 2011

только то, что написано в заголовке: я создаю пустой подкласс UIView и добавляю к нему подпредставление, создаю пустой метод layoutSubviews и добавляю точку останова.Затем я строю проект, и симуляция останавливается при загрузке представления в этой точке в методе layoutSubviews.Пока все хорошо.Я продолжаю симуляцию и поворачиваю устройство (при условии, что контроллер представления настроен на любую ориентацию), но layoutSubviews больше не вызывается, несмотря на то, что я вижу, как вращается мой объект.Любая идея?

Хорошо, я упрощу свой вопрос: как мне создать пользовательский UIView с некоторыми подпредставлениями и сделать его реагирующим на ориентацию устройства?Мне не нужно использовать drawRect или что-то еще, просто создайте подкласс UIView, добавьте пару подвидов и обрабатывайте их, когда устройство вращается.

Ответы [ 2 ]

6 голосов
/ 21 февраля 2013

Вы пытались установить маску autoresizingMask в UIView? Например, как показано ниже:

someView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

Из документации UIView :

'Когда границы представления изменяются, это представление автоматически изменяет свой размер подпредставления в соответствии с маской авторазмера каждого подпредставления '

Если вы установите autoresizingMask в значение, отличное от None, это должно означать, что метод layoutSubviews всегда вызывается при изменении границ представления.

3 голосов
/ 26 мая 2011

Я не уверен, что это точно так же, но я столкнулся с подобной проблемой. Я использовал UISplitViewContoller (шаблон из Xcode) и добавил подпредставление в DetailViewController. Методы layoutSubviews не вызывались при ротации, поскольку это было подпредставлением основного UIView в ViewController. Поэтому я добавил это в DetailsViewController, чтобы заставить его работать (detailView - мое подпредставление):

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
    if (detailView != nil) [detailView layoutSubviews];
}
...