Советы TipKit отображаются несколько раз при использовании в приложении iOS 16+.IOS

Программируем под IOS
Ответить
Anonymous
 Советы TipKit отображаются несколько раз при использовании в приложении iOS 16+.

Сообщение Anonymous »

Мое приложение — iOS 16+. Всем пользователям iOS 17+ я хотел бы использовать TipKit для отображения подсказок по использованию.
На основе некоторых руководств я создал следующую настройку с использованием фиктивного протокола, чтобы иметь возможность использовать popupTip без ошибок компиляции iOS 16 (см. ниже)
Хотя в целом это работает, советы отображаются несколько раз. Однако, если я правильно понимаю документацию Apple, этого не должно произойти. Каждая подсказка должна отображаться только один раз.
Однако при использовании более одной подсказки последняя подсказка отображается снова и снова, как только соответствующее представление становится видимым (без использования resetDatastore()).
Это из-за моей настройки с использованием фиктивного протокола? Или я вообще что-то делаю не так?

Полная настройка:
/// 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
}
}
}

Теперь я могу использовать подсказки в своем коде:
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")
}
}

TipKit настроен в настройках моего приложения:
.task {
if #available(iOS 17, *) {
#if DEBUG
//try? Tips.resetDatastore()
#endif

try? Tips.configure([
.datastoreLocation(.applicationDefault),
.displayFrequency(.immediate)
])
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... ios-16-app
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»