Skip to content

Commit

Permalink
Add AutoLayoutSizeSource (#110)
Browse files Browse the repository at this point in the history
A SizeSource that calculates a view size based on its auto-layout constraints.

Update AutoLayoutSizeSource

It now supports updating the view with a given closure, and customization of the fittingPriority for layout size calculations.

Fixed code linting
  • Loading branch information
Tylerian authored and lkzhao committed Oct 31, 2018
1 parent 0a71118 commit 1d26df3
Showing 1 changed file with 28 additions and 0 deletions.
28 changes: 28 additions & 0 deletions Sources/SizeSource/AutoLayoutSizeSource.swift
@@ -0,0 +1,28 @@
import UIKit

public typealias ClosureViewUpdateFn<Data, View> = (View, Data, Int) -> Void

open class AutoLayoutSizeSource<Data, View: UIView>: SizeSource<Data> {
private let dummyView: View
private let dummyViewUpdater: ClosureViewUpdateFn<Data, View>
private let horizontalFittingPriority: UILayoutPriority
private let verticalFittingPriority: UILayoutPriority
public init(dummyView: View.Type,
horizontalFittingPriority: UILayoutPriority = .defaultHigh,
verticalFittingPriority: UILayoutPriority = .defaultLow,
viewUpdater: @escaping ClosureViewUpdateFn<Data, View>) {

self.dummyView = View()
self.dummyViewUpdater = viewUpdater
self.horizontalFittingPriority = horizontalFittingPriority
self.verticalFittingPriority = verticalFittingPriority
}
open override func size(at index: Int, data: Data, collectionSize: CGSize) -> CGSize {
self.dummyViewUpdater(self.dummyView, data, index)

return self.dummyView.systemLayoutSizeFitting(
collectionSize,
withHorizontalFittingPriority: self.horizontalFittingPriority,
verticalFittingPriority: self.verticalFittingPriority)
}
}

0 comments on commit 1d26df3

Please sign in to comment.