pushing the heightConstraint into the selfsizingcv
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
parent
ba33824576
commit
0aea286630
@ -7,6 +7,7 @@
|
||||
|
||||
import Foundation
|
||||
import UIKit
|
||||
import Combine
|
||||
|
||||
/// UICollectionView subclassed to deal with Changing the size of itself based on its children and layout and changes of its contentSize.
|
||||
@objc(VDSSelfSizingCollectionView)
|
||||
@ -34,10 +35,13 @@ public final class SelfSizingCollectionView: UICollectionView {
|
||||
// MARK: - Private Properties
|
||||
//--------------------------------------------------
|
||||
private var contentSizeObservation: NSKeyValueObservation?
|
||||
private var collectionViewHeight: NSLayoutConstraint?
|
||||
private var anyCancellable: AnyCancellable?
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Overrides
|
||||
//--------------------------------------------------
|
||||
|
||||
/// The natural size for the receiving view, considering only properties of the view itself.
|
||||
public override var intrinsicContentSize: CGSize {
|
||||
let contentSize = self.contentSize
|
||||
@ -63,12 +67,16 @@ public final class SelfSizingCollectionView: UICollectionView {
|
||||
//ensure autoLayout uses intrinsic height
|
||||
setContentHuggingPriority(.required, for: .vertical)
|
||||
setContentCompressionResistancePriority(.required, for: .vertical)
|
||||
collectionViewHeight = heightAnchor.constraint(equalToConstant: 0).activate()
|
||||
|
||||
// Observing the value of contentSize seems to be the only reliable way to get the contentSize after the collection view lays out its subviews.
|
||||
self.contentSizeObservation = self.observe(\.contentSize, options: [.old, .new]) { [weak self] _, change in
|
||||
// If we don't specify `options: [.old, .new]`, the change.oldValue and .newValue will always be `nil`.
|
||||
if change.newValue != change.oldValue {
|
||||
self?.invalidateIntrinsicContentSize()
|
||||
if let height = change.newValue?.height {
|
||||
self?.collectionViewHeight?.constant = height
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -103,7 +103,6 @@ open class ButtonGroup: View {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Private Properties
|
||||
//--------------------------------------------------
|
||||
fileprivate var collectionViewHeight: NSLayoutConstraint?
|
||||
|
||||
fileprivate lazy var positionLayout = ButtonGroupPositionLayout().with {
|
||||
$0.position = .center
|
||||
@ -132,8 +131,6 @@ open class ButtonGroup: View {
|
||||
super.setup()
|
||||
addSubview(collectionView)
|
||||
collectionView.pinToSuperView()
|
||||
collectionViewHeight = heightAnchor.constraint(equalToConstant: VDS.Button.Size.large.height)
|
||||
collectionViewHeight?.activate()
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
@ -184,7 +181,6 @@ open class ButtonGroup: View {
|
||||
DispatchQueue.main.async { [weak self] in
|
||||
guard let self else { return }
|
||||
self.collectionView.collectionViewLayout.invalidateLayout()
|
||||
self.collectionViewHeight?.constant = self.collectionView.intrinsicContentSize.height
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user