3

iPad Air 2 および iPad Mini 4 の分割画面機能を実装しています。分割画面のサイズがいつ変更されるかを検出しようとしています。プライマリ アプリとして実行する場合、 または のいずれかviewWillTransitionToSizewillTransitionToTraitCollection実行されます。アプリがセカンダリ アプリとして実行されている場合、セカンダリ アプリviewWillTransitionToSizeを開くとき、または画面の 1/4 から 1/2 に変化するランドスケープ モードの間に関数が呼び出されます。セカンダリ アプリの使用を画面の 1/2 から 1/4 に変更すると、その変更を示すのに役立つ関数は呼び出されません。呼び出される関数があるはずですか?

4

1 に答える 1

2

アップデート

UICollectionView を使用している場合は、呼び出される UICollectionViewLayout メソッドに注意を払う必要があります。shouldInvalidateLayoutForBoundsChange:基本的に、このメソッドは、コレクション ビューの境界 (サイズではない) が変更されるたびに呼び出されます。YES と答えると、コレクション ビューの再レイアウトが行われます。

実験するために、(たとえば、UICollectionViewFlowLayout をサブクラス化することによって) このメソッドを次のようにオーバーライドできます。

- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
{
    return YES;
}

それが機能する場合は、実際のサイズが変更されたときにのみ YES を返すより効率的な方法を試すことができます。このようなもの

- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
{
    BOOL should = !CGSizeEqualToSize(self.collectionView.frame.size, newBounds.size);
    return should;
}

を使用するよりも自然です。viewWillTransitionToSize

于 2015-12-07T22:34:28.677 に答える