gleue / TGLStackedViewController

A stacked view layout with gesture-based reordering using a UICollectionView -- inspired by Passbook and Reminders apps.
MIT License
1.21k stars 117 forks source link

How to get real contentSize? #52

Open Ewg777 opened 5 years ago

Ewg777 commented 5 years ago

Hi,

Thanks for such a great lib!

How to get real height of the content without filling and so on?

Here is an example but it doesn't work properly with you lib. Do you have any idea? @gleue

class MyCollectionView: UICollectionView {
    // MARK: - Layout
    override func layoutSubviews() {
        super.layoutSubviews()

        let height = contentSize.height
        guard
            height > 1 else {
                return
        }
// here the height
    }
}

P.s. I'd like to use two instances of the lib on a page.

Regards,

Ewg777 commented 5 years ago

@gleue

gleue commented 5 years ago

Did you mean the height of (overlapping) cards combined?

Ewg777 commented 5 years ago

2019-03-29_11-02-55 @gleue this one

gleue commented 5 years ago

Have you tried collectionView.collectionViewLayout.collectionViewContentSize ?

Ewg777 commented 5 years ago

@gleue unfortunately, it's not public method. Also this method will always return self.collectionView.bounds


    if (contentSize.height < CGRectGetHeight(self.collectionView.bounds)) {

        contentSize.height = CGRectGetHeight(self.collectionView.bounds);
gleue commented 5 years ago

Oops -- didn't look at the code ;-)

Sorry, then you'd probably have to determine it from your own version of TGLStackedLayout. Have a look at prepareLayout...

Ewg777 commented 5 years ago

@gleue right, I've made a workaround in TGLStackedLayout and TGLExposedLayout. It works for TGLExposedLayoutPinningModeNone.


- (void)prepareLayout {
    CGRect realContentSize = CGRectZero;
    for (NSInteger item = 0; item < itemCount; item++) {
...

        layoutAttributes[indexPath] = attributes;
        realContentSize = CGRectUnion(attributes.frame, realContentSize);
    }
    self.realContentSize = realContentSize;

    self.layoutAttributes = layoutAttributes;
}

Do you have a better solution?

gleue commented 5 years ago

Elegant 👍

I don't have a better solution off the top of my head... Would have to think about it, but I am really busy at the moment, so it would take some time

Ewg777 commented 5 years ago

Great! Thanks!