Basierend auf einigen Tutorials habe ich das folgende Setup mit einem Dummy-Protokoll erstellt, um popupTip ohne iOS 16-Kompilierungsfehler verwenden zu können (siehe unten)
Obwohl dies im Allgemeinen funktioniert, werden Tipps mehrmals angezeigt. Wenn ich die Apple-Dokumente jedoch richtig verstehe, sollte dies nicht passieren. Jeder Tipp sollte nur einmal angezeigt werden.
Bei der Verwendung von mehr als einem Tipp wird jedoch der letzte Tipp immer wieder angezeigt, sobald die entsprechende Ansicht sichtbar wird (ohne Verwendung von resetDatastore()).
Liegt das daran, dass ich das Dummy-Protokoll verwende? Oder mache ich generell etwas falsch?
Vollständige Einrichtung:
Code: Select all
/// Protocol for ensuring compatibility.
/// Enables tips to be passed and stored as properties without availability issues.
@available(iOS, obsoleted: 17, message: "This will be removed once we only support iOS 17+")
public protocol TipSupport {
@available(iOS 17, *)
var tip: AnyTip { get }
}
@available(iOS 17, *)
public extension Tip where Self: TipSupport {
var tip: AnyTip { AnyTip(self) }
}
public extension View {
/// Helper for making the `popupTip` modifier available for iOS some View {
if #available(iOS 17, *), let tip = tipSupport?.tip {
self.popoverTip(tip, arrowEdge: arrowEdge)
} else {
self
}
}
}
Code: Select all
struct TipTestView: View {
// let sampleTip = SampleTip()
var body: some View {
Text("Hello, World!")
.popupTip(SampleTip())
//.popupTip(sampleTip) // no difference
}
}
struct SampleTip: Tip, TipSupport {
var id: String { "SampleTip" }
var title: Text {
Text("Some Title")
}
var message: Text? {
Text("More information")
}
var image: Image? {
Image(systemName: "hand.tap")
}
}
Code: Select all
.task {
if #available(iOS 17, *) {
#if DEBUG
//try? Tips.resetDatastore()
#endif
try? Tips.configure([
.datastoreLocation(.applicationDefault),
.displayFrequency(.immediate)
])
}
}
Mobile version