親指を水平に表示するUICollectionViewコントロールを配置したい(親指の1行のみ)。何らかの理由で、UICollectionViewが親指を44ピクセル下に押しているため、「0」の高さは実際には「44」です。ナビゲーションバーの高さを考慮するために、このスペースを追加しているのではないかと思います(ただ仮定します)。 UICollectionViewは画面の一部のみにあるため、このマージンは必要ありません。削除する方法はありますか?
問題は、コレクションビューのコンテンツインセットにある可能性があります。 self.automaticallyAdjustsScrollViewInsets = NO;
をView ControllerのviewDidLoad
メソッドに追加してみてください。
ストーリーボードでもこれを設定できます。
ViewControllerを選択したことを確認し、「スクロールビューのインセットを調整」のチェックを外します。
ただし、このIB /ストーリーボードメソッドがiOS6で何を行うかはテストしていません。コードメソッドでは、VCがメソッドに応答することを確認する必要があります。
if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) {
self.automaticallyAdjustsScrollViewInsets = NO;
}
私は追加することがわかりました:
self.edgesForExtendedLayout = UIRectEdgeNone;
View Controllerでは、受け入れられた答えを機能させることができなかったため、UICollectionViewをロードして問題を解決しました。
私がこの答えを見つけた質問は here で見つけることができ、自動調整されたスクロールビューインセット、拡張レイアウト、拡張レイアウト用のEdgeの違いの非常に詳細で興味深い説明を提供します。
読む価値あり
スウィフト3:
まず、viewControllers automaticallyAdjustsScrollViewInsets
をfalseに設定します。
self.automaticallyAdjustsScrollViewInsets = false
次に、それに応じてエッジのインセットを調整できるはずです。
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
//top, left, bottom, right
return UIEdgeInsets(top: 10, left: 0, bottom: 0, right: 0)
}
コレクションビューのデリゲートフローレイアウトを使用して、この値を0に強制することができます。
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
return UIEdgeInsetsMake(PADDING_TOP, PADDING_LEFT, PADDING_BOTTOM, PADDING_RIGHT);
}
パディングの値を変更します。
いくつかの他の人が言及したように、viewController.automaticallyAdjustsScrollViewInsets
は iOS 11から非推奨 になりました。私の解決策...
Swift 4.2、Xcode 10.1、iOS 12.1:
何らかの理由で、collectionView.contentSize.height
がコレクションビューの解決された高さよりも小さく表示されていました。最初に、スーパービューの高さの1/2に対して自動レイアウト制約を使用していました。 これを修正するために、ビューの「安全な領域」に関連するように制約を変更しました。
これにより、collectionView.contentSize.height
を使用して、コレクションビューに垂直にセルの高さを設定できました。
private func setCellSize() {
let height: CGFloat = (collectionView.contentSize.height) / CGFloat(numberOfRows)
let width: CGFloat = view.frame.width - CGFloat(horizontalCellMargin * 2)
let layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
layout.itemSize = CGSize(width: width, height: height)
}
Before
After