Swiftui scrollview не имеет некоторых функций, которые мне нужны, и поэтому я создал пользовательский myscrollview на основе uiscrollview , завернутый в UiviewControllerRepresentable . Хотя это работает нормально в целом, я знаю, что наткнулась на очень странную проблему:
, когда MyScrollView используется в листе, а его содержимое касается нижней части Safearea, пользовательский интерфейс замораживает, как только следует отображать. Обратите внимание, что код настроен на размер дисплея iPhone 16 Pro . При запуске на разных устройствах может потребоваться отрегулировать высоту цвета. Иолло .
В демонстрационном коде UI замораживает, если цвет. Вызов имеет высоту от 738 до 771 пикселей. Каждая другая высота в порядке.
Есть ли что -то не так с моей реализацией myscrollview ?struct ContentView: View {
@State private var showSheet: Bool = false
var body: some View {
ZStack {
Button("Show Sheet") {
showSheet = true
}
}
.sheet(isPresented: $showSheet) {
VStack {
Text("Some Header Content")
MyScrollView {
VStack {
Color.yellow
//.frame(height: 737) // works
.frame(height: 738) // does NOT works
// ...
//.frame(height: 771) // does NOT works
//.frame(height: 772) // works
}
}
.ignoresSafeArea()
}
}
}
}
struct MyScrollView: UIViewControllerRepresentable {
let content: Content
init(@ViewBuilder content: () -> Content) {
self.content = content()
}
func makeUIViewController(context: Context) -> UIViewController {
let scrollViewVC = UIViewController()
scrollViewVC.view.backgroundColor = .clear
let scrollView = UIScrollView()
scrollView.backgroundColor = .clear
let contentVC = UIHostingController(rootView: self.content)
contentVC.view.backgroundColor = .clear
context.coordinator.contentVC = contentVC
context.coordinator.scrollView = scrollView
scrollView.translatesAutoresizingMaskIntoConstraints = false
scrollViewVC.view.addSubview(scrollView)
NSLayoutConstraint.activate([
scrollView.topAnchor.constraint(equalTo: scrollViewVC.view.topAnchor),
scrollView.bottomAnchor.constraint(equalTo: scrollViewVC.view.bottomAnchor),
scrollView.leadingAnchor.constraint(equalTo: scrollViewVC.view.leadingAnchor),
scrollView.trailingAnchor.constraint(equalTo: scrollViewVC.view.trailingAnchor)
])
contentVC.willMove(toParent: scrollViewVC)
scrollViewVC.addChild(contentVC)
contentVC.view.translatesAutoresizingMaskIntoConstraints = false
scrollView.addSubview(contentVC.view)
NSLayoutConstraint.activate([
contentVC.view.topAnchor.constraint(equalTo: scrollView.contentLayoutGuide.topAnchor),
contentVC.view.bottomAnchor.constraint(equalTo: scrollView.contentLayoutGuide.bottomAnchor),
contentVC.view.leadingAnchor.constraint(equalTo: scrollView.contentLayoutGuide.leadingAnchor),
contentVC.view.trailingAnchor.constraint(equalTo: scrollView.contentLayoutGuide.trailingAnchor),
contentVC.view.widthAnchor.constraint(equalTo: scrollView.frameLayoutGuide.widthAnchor)
])
contentVC.didMove(toParent: scrollViewVC)
return scrollViewVC
}
func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
context.coordinator.contentVC?.rootView = content
}
func makeCoordinator() -> Coordinator {
return Coordinator()
}
class Coordinator {
var contentVC: UIHostingController?
var scrollView: UIScrollView?
init() {
//...
}
}
}
#Preview {
ContentView()
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... nt-touches
Uiscrollview in uiviewcontrollerRepresentable - UI замораживает, когда контент касается нижней Safearea ⇐ IOS
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как получить доступ/использовать @Binding в uiviewcontrollerRepresentable координатора
Anonymous » » в форуме IOS - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Панель инструментов с UiviewControllerRepresentable Breaks Navigation в Swiftui ios 18.4+
Anonymous » » в форуме IOS - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-