UICollectionView with ContentInset is not Scrolling all the Way Down

后端 未结 6 1642
长发绾君心
长发绾君心 2020-12-29 06:20

I am setting the content inset of a UICollectionView:

[_collectionView setContentInset:UIEdgeInsetsMake(0.f, 0.f, 100.f, 0.f)];

Then I am s

相关标签:
6条回答
  • 2020-12-29 06:57

    You can set the referenceSizeForFooterInSection function in your viewController class:

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize {
        return CGSize(width: view.frame.width, height: 50)
    }
    

    Just set the height to your required value.

    0 讨论(0)
  • 2020-12-29 07:00

    If you are using flow layout try to set _collectionView.collectionViewLayout.sectionInset.

    0 讨论(0)
  • 2020-12-29 07:06

    swift version

    collectionview.contentInset = UIEdgeInsetsMake(44,0,0,0)
    collectionview.scrollIndicatorInsets = UIEdgeInsetsMake(44,0,0,0)
    
    0 讨论(0)
  • 2020-12-29 07:16

    Possible Issue

    You have set the collectionView below the toolbar and added constraints to bottom of superview for both views.

    Solution

    Set the constraints of the toolbar to bottom, leading and set the width and height to fixed size. For your collectionView set the constraints to top, to bottom with the toolbar, leading to the superview and (alternative) with fixed size of width

    Update

    CollectionView

    Follow these steps to make it work:

    Check your collection view, and don't put it below toolbar, and add these constraints by selecting your collectionView on Document Outline, click ctrl and drag it to your view, a popup will appear, hold shift and select these constraints.

    CollectionView Constraints

    Toolbar

    Check the leading and bottom, by dragging with ctrl in view. And add fixed width and height for toolbar.

    Toolbar Constraints

    Dealing with scrolling before viewAppears

    -(void)viewWillAppear:(BOOL)animated
    {
        [collectionView reloadData];
        [self scrollToLastMessageAnimated:YES];
    }
    
    0 讨论(0)
  • 2020-12-29 07:17

    Programmatically, I solved this by using (Swift 5) :

    collectionView.contentInsetAdjustmentBehavior = .never
    
    0 讨论(0)
  • 2020-12-29 07:19

    Today, by chance I discovered the solution!

    Select your view controller and uncheck the option "Adjust Scroll View Insets".

    enter image description here

    With this option unchecked, iOS does not automatically adjust your insets of the view (and probably its subviews), which caused the problems for me ... Uncheck it and configure your scroll insets like this programmatically:

    - (void)configureInsetsOfCollectionView
    {
        [_collectionView setContentInset: UIEdgeInsetsMake(self.navigationController.navigationBar.bounds.size.height + [UIApplication sharedApplication].statusBarFrame.size.height + DEFAULT_SPACING, 0.f, _keyboardHeight + _toolbar.bounds.size.height + DEFAULT_SPACING, 0.f)];
        [_collectionView setScrollIndicatorInsets:UIEdgeInsetsMake(self.navigationController.navigationBar.bounds.size.height + [UIApplication sharedApplication].statusBarFrame.size.height, 0.f, _keyboardHeight + _toolbar.bounds.size.height, 0.f)];
    }
    
    0 讨论(0)
提交回复
热议问题