AndreasVerhoeven/SelfSizingScroller
Fixes scrollToRow/ItemAtIndexPath: for Self Sizing Cells
for UITableView:
public func reallyScrollToRow(at indexPath: IndexPath,
at scrollPosition: UITableView.ScrollPosition,
insets: UIEdgeInsets = .zero,
animated: Bool,
completion: ((UITableView, _ hasCompleted: Bool) -> Void)? = nil)
for UICollectionView:
func reallyScrollToItem(at indexPath: IndexPath,
at scrollPosition: UICollectionView.ScrollPosition,
insets: UIEdgeInsets = .zero,
animated: Bool,
completion: ((UICollectionView, _ hasCompleted: Bool) -> Void)? = nil)Extras
Additional Insets
You can specify additional insets that will be respected when scrolling. For example, if you want to scroll a row 10 points below the top, you can use at: .top, insets: UIEdgeInsets(top: 10, left: 0, bottom: 0, right: 0)
CompletionHandler
There's an optional completionHandler that will be called when scrolling is done with a hasCompleted flag to indicate if we fully scrolled to the designated offset or if we were interrupted.
isScrolling flag
Additionally, checking scrollView.scroller.isScrolling also works to see if we're currently in a scroll animation.
Extendable
The actual scrolling and determining where to scroll to are separated, so it's easy to extend by implementing a single method in a protocol: `` protocol ScrollOffsetProviderProtocol { func targetScrollOffset(witStartOffset startOffset: CGPoint) -> CGPoint? } ``
and then call: ``` class MyScrollOffsetProvider: ScrollOffsetProviderProtocol { func targetScrollOffset(witStartOffset startOffset: CGPoint) -> CGPoint? { // calculate actual position, gets called on every animation frame. // It's fine to return different positions on each invocation, // as long as it eventually stabilizes (otherwise we'll scroll // forever). return ...; } }
let scrollView = UIScrollView() let provider = MyScrollOffsetProvider() scrollView.startScrolling(with: provider, animated: true) ```
Just dynamically return which offset to scroll to and the library will make it happen.
Package Metadata
Repository: AndreasVerhoeven/SelfSizingScroller
Stars: 8
Forks: 1
Open issues: 0
Default branch: main
Primary language: swift
License: MIT
README: README.md