Files
divkit/client/ios/DivKitPlayground/UI/DivView/VisibilityTrackingScrollView.swift
pkurchatov ccb9df0c15 Imports cleanup
7f9830f5f0475350ea40abc9e2ed27c7f725dbc8
2024-07-15 20:04:34 +03:00

31 lines
776 B
Swift

import UIKit
import DivKit
import VGSL
final class VisibilityTrackingScrollView: UIScrollView {
var divView: DivView? {
didSet {
oldValue?.removeFromSuperview()
sizeChangedSubscription = divView?.addObserver { [weak self] _ in self?.setNeedsLayout() }
divView.map { addSubview($0) }
setNeedsLayout()
}
}
private var sizeChangedSubscription: Disposable?
private var divViewSize: CGSize {
divView?.cardSize?.sizeFor(parentViewSize: boundsSize) ?? .zero
}
override func layoutSubviews() {
super.layoutSubviews()
let divViewFrame = CGRect(origin: .zero, size: divViewSize)
divView?.frame = divViewFrame
divView?.onVisibleBoundsChanged(to: bounds.intersection(divViewFrame))
contentSize = divViewSize
}
}