#swift #swiftui
#swift #swiftui
Вопрос:
Этот простой ScrollView имеет очень прерывистую прокрутку при каждом обновлении @State
свойства.
import SwiftUI
struct ContentView: View {
@State var currentTime: Double = 0
let timer = Timer.publish(every: 0.5, on: .main, in: .common).autoconnect()
var body: some View {
ScrollView {
Text("currentTime: (currentTime)")
}
.onReceive(timer) { input in
currentTime = input.timeIntervalSince1970
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Видео с глюками при прокрутке. ScrollView
не работает.
Что я пробовал
- Помещая
.onReceive
внутриScrollView
- Обновление
@State currentTime
с помощью других методов, помимо таймера. Все они так глючат.
Как я могу добиться ScrollView
плавной прокрутки даже во @State
время обновлений?
Ответ №1:
Я думаю, что это ошибка! Я был удивлен, насколько это возможно, потому что я постоянно обновляю свой ScrollView во время прокрутки! вам нужно добавить одну строку кода, чтобы решить проблему!
import SwiftUI
struct ContentView: View {
@State var currentTime: Double = 0
let timer = Timer.publish(every: 0.5, on: .main, in: .common).autoconnect()
var body: some View {
ScrollView {
Color.clear.frame(height: 0) // <<: Here!
Text("currentTime: (currentTime)")
}
.onReceive(timer) { input in
currentTime = input.timeIntervalSince1970
}
}
}
Комментарии:
1. Я попробовал это, и это сработало в данном конкретном случае, но мой фактический (более сложный) код все еще был поврежден. У
ScrollView
меня также был aLazyVStack
с некоторыми дочерними элементами. Я переставил вещи, и это сработало. Мой совет: если вы видите эту проблему, попробуйте изменить порядок ваших вложенных представлений. В любом случае, я принял это, потому что это исправило исходный вопрос.2. @joshuakcockrell: В качестве вашего совета вы сказали: «попробуйте изменить порядок», но в вашем первоначальном вопросе буквально вызывается только один контент
Text("currentTime: (currentTime)")
Как бы вы решили исходный вопрос своим советом? Итак, как я уже сказал, в ScrollView Xcode 12.4 (12D4e) действительно есть ошибка, я мог бы решить проблему с помощью совершенно ненужногоcolor
, и, как я также упоминал в своем ответе, я был удивлен этой проблемой, потому что со мной этого никогда не случалось, поэтому мой совет был бы code in moment! это означает, что любой код помогает и решает проблему с текущей версией.3. Да, я определенно не могу исправить исходный вопрос, переставив вещи. Просто говорю, что если кто-то столкнется с этим в будущем, попробуйте свой ответ на добавление
Color.clear
, и если это не сработает, попробуйте изменить порядок вложенных представлений.