By Hoshino

0

UITableViewとかUICollectionViewとかがズレるとき

Categories : Objective-C

暖かいです。
もうすっかり春です。
だから今日は服を着ないで過ごそうと思います。

さて、
iPhoneアプリを作ろうとキーボード(あっきぃの数少ない友だち)を叩いているとこんなエラーが。

the behavior of the UICollectionViewFlowLayout is not defined because:

the item height must be less than the height of the UICollectionView minus the section insets top and bottom values.

出ました。英語です。

(誰か早く関西弁でエラーを吐き出すプラグインを作ってください。)

どんな意味か知りませんが、

「UICollectionViewのアイテムの高さというか座標というかなんかそんな感じのがUICollectionViewの高さより小さいよ。クズめ。」

みたいなニュアンスだと思います。

状況としては、
UINavigationBarが非表示のViewControllerから、
UINavigationBarが表示されているViewController遷移する感じのところにUICollectionViewがあるって感じ。

あーこれはUINavigationBarの表示&非表示で
ScrollView系のInsetsが自動で変更してくれるような機能が備わっているのではないだろうか。そしてあっきぃに生きる資格はほぼ無いのではないだろうか。

との予想の下、
調べてみるとこんなプロパティがUIViewControllerあるのでした。

@property(nonatomic,assign) BOOL automaticallyAdjustsScrollViewInsets NS_AVAILABLE_IOS(7_0); // Defaults to YES

このautomaticallyAdjustsScrollViewInsetsの値がデフォルトでYESなので、

きっといいタイミングでNOにすればいいのです。

とりあえずインスタンス生成時に変更しておけばいいだろうとそのUIViewControllerにこんな記述を追加。

-(instancetype)init
{
        self = [super init];
        if(self) {
                self.automaticallyAdjustsScrollViewInsets = NO;
        }
        return self;
}

結果は…

治った。

ScrollView系がズレるのは他にも色々原因があると思うので、参考の1つとしてお考えくださいまし。

ではでは。