top bar update
This commit is contained in:
parent
4f46f715aa
commit
76642b89d5
@ -1,69 +0,0 @@
|
|||||||
import SwiftUI
|
|
||||||
import UIKit
|
|
||||||
|
|
||||||
struct RefreshableScrollView<Content: View>: UIViewRepresentable {
|
|
||||||
var content: Content
|
|
||||||
var onRefresh: () -> Void
|
|
||||||
var isRefreshing: Binding<Bool>
|
|
||||||
|
|
||||||
init(isRefreshing: Binding<Bool>, onRefresh: @escaping () -> Void, @ViewBuilder content: () -> Content) {
|
|
||||||
self.content = content()
|
|
||||||
self.onRefresh = onRefresh
|
|
||||||
self.isRefreshing = isRefreshing
|
|
||||||
}
|
|
||||||
|
|
||||||
func makeUIView(context: Context) -> UIScrollView {
|
|
||||||
let scrollView = UIScrollView()
|
|
||||||
scrollView.delaysContentTouches = false
|
|
||||||
|
|
||||||
let refreshControl = UIRefreshControl()
|
|
||||||
refreshControl.addTarget(context.coordinator, action: #selector(Coordinator.handleRefresh), for: .valueChanged)
|
|
||||||
scrollView.refreshControl = refreshControl
|
|
||||||
|
|
||||||
let hostingController = UIHostingController(rootView: content)
|
|
||||||
hostingController.view.translatesAutoresizingMaskIntoConstraints = false
|
|
||||||
scrollView.addSubview(hostingController.view)
|
|
||||||
|
|
||||||
NSLayoutConstraint.activate([
|
|
||||||
hostingController.view.leadingAnchor.constraint(equalTo: scrollView.contentLayoutGuide.leadingAnchor),
|
|
||||||
hostingController.view.trailingAnchor.constraint(equalTo: scrollView.contentLayoutGuide.trailingAnchor),
|
|
||||||
hostingController.view.topAnchor.constraint(equalTo: scrollView.contentLayoutGuide.topAnchor),
|
|
||||||
hostingController.view.bottomAnchor.constraint(equalTo: scrollView.contentLayoutGuide.bottomAnchor),
|
|
||||||
hostingController.view.widthAnchor.constraint(equalTo: scrollView.frameLayoutGuide.widthAnchor)
|
|
||||||
])
|
|
||||||
|
|
||||||
context.coordinator.hostingController = hostingController
|
|
||||||
|
|
||||||
return scrollView
|
|
||||||
}
|
|
||||||
|
|
||||||
func updateUIView(_ uiView: UIScrollView, context: Context) {
|
|
||||||
if isRefreshing.wrappedValue {
|
|
||||||
uiView.refreshControl?.beginRefreshing()
|
|
||||||
} else {
|
|
||||||
// Отложенное завершение, чтобы избежать цикла обновлений
|
|
||||||
DispatchQueue.main.async {
|
|
||||||
uiView.refreshControl?.endRefreshing()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
context.coordinator.hostingController?.rootView = content
|
|
||||||
}
|
|
||||||
|
|
||||||
func makeCoordinator() -> Coordinator {
|
|
||||||
Coordinator(self)
|
|
||||||
}
|
|
||||||
|
|
||||||
class Coordinator: NSObject {
|
|
||||||
var parent: RefreshableScrollView
|
|
||||||
var hostingController: UIHostingController<Content>?
|
|
||||||
|
|
||||||
init(_ parent: RefreshableScrollView) {
|
|
||||||
self.parent = parent
|
|
||||||
}
|
|
||||||
|
|
||||||
@objc func handleRefresh() {
|
|
||||||
parent.onRefresh()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user