Swift viewWillTransitionToSize не вызывается с разделенным экраном
Я реализую функцию разделения экрана для iPad Air 2 и iPad Mini 4. Я пытаюсь определить, когда изменяется размер разделения экрана. При запуске в качестве основного приложения, либо viewWillTransitionToSize
или же willTransitionToTraitCollection
будет выполнен. Если мое приложение работает как дополнительное приложение, viewWillTransitionToSize
Функция вызывается при открытии дополнительного приложения или в ландшафтном режиме, при изменении от 1/4 до 1/2 экрана. Когда я изменяю вторичное приложение с использования 1/2 на 1/4 экрана, никакие функции не вызываются, чтобы помочь указать на это изменение. Должна ли быть вызванная функция?
1 ответ
ОБНОВИТЬ
Если вы используете UICollectionView, вам нужно обратить внимание на метод UICollectionViewLayout, который вызывается shouldInvalidateLayoutForBoundsChange:
По сути, этот метод называется каждый раз, когда границы (не размер) представления вашей коллекции изменяются, и если вы отвечаете ДА, ретрансляции представления вашей коллекции.
Чтобы экспериментировать, вы можете (например, с помощью подкласса UICollectionViewFlowLayout) переопределить этот метод следующим образом:
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
{
return YES;
}
Если это работает для вас, вы можете попробовать более эффективный способ вернуть YES только при изменении фактического размера. Что-то вроде этого
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
{
BOOL should = !CGSizeEqualToSize(self.collectionView.frame.size, newBounds.size);
return should;
}
это было бы более естественно, чем использование viewWillTransitionToSize