SwiftUI: переходы масштабирования-навигации не работают в tabViewBottomAccessory с моделью представленияIOS

Программируем под IOS
Ответить
Anonymous
 SwiftUI: переходы масштабирования-навигации не работают в tabViewBottomAccessory с моделью представления

Сообщение Anonymous »

Я обнаружил, что переход навигации по масштабированию с помощью matchedTransitionSource в tabViewBottomAccessory не работает, когда состояние isPresented установлено через опубликованную переменную в ObservableObject. Таким образом, я получаю тот же эффект перехода, как если бы не был установлен соответствующий TransitionSource.
Оболочка свойства Observable iOS 17 имеет ту же проблему, что и ObservableObject:

Код: Выделить всё

import SwiftUI
import Combine

private final class ViewModel: ObservableObject {
@Published var isPresented = false
}

struct ContentView: View {
@Namespace private var namespace

@StateObject private var viewModel = ViewModel()
//    @State private var isPresented = false

var body: some View {
TabView {
Button {
viewModel.isPresented = true
} label: {
Text("Start")
}
.tabItem {
Image(systemName: "house")
Text("Home")
}

Text("Search")
.tabItem {
Image(systemName: "magnifyingglass")
Text("Search")
}

Text("Profile")
.tabItem {
Image(systemName: "person")
Text("Profile")
}
}
.sheet(isPresented: $viewModel.isPresented) {
Text("Sheet")
.presentationDragIndicator(.visible)
.navigationTransition(.zoom(sourceID: "tabViewBottomAccessoryTransition", in: namespace))
}
.tabViewBottomAccessory {
Button {
viewModel.isPresented = true
} label: {
Text("BottomAccessory")
}
.matchedTransitionSource(id: "tabViewBottomAccessoryTransition", in: namespace)
}
}
}
Однако при использовании свойства State все работает:

Код: Выделить всё

import SwiftUI
import Combine

private final class ViewModel: ObservableObject {
@Published var isPresented = false
}

struct ContentView: View {
@Namespace private var namespace

//    @StateObject private var viewModel = ViewModel()
@State private var isPresented = false

var body: some View {
TabView {
Button {
isPresented = true
} label: {
Text("Start")
}
.tabItem {
Image(systemName: "house")
Text("Home")
}

Text("Search")
.tabItem {
Image(systemName: "magnifyingglass")
Text("Search")
}

Text("Profile")
.tabItem {
Image(systemName: "person")
Text("Profile")
}
}
.sheet(isPresented: $isPresented) {
Text("Sheet")
.presentationDragIndicator(.visible)
.navigationTransition(.zoom(sourceID: "tabViewBottomAccessoryTransition", in: namespace))
}
.tabViewBottomAccessory {
Button {
isPresented = true
} label: {
Text("BottomAccessory")
}
.matchedTransitionSource(id: "tabViewBottomAccessoryTransition", in: namespace)
}
}
}
Есть ли причина, это ошибка SwiftUI?
Примечание:
  • Фрагменты представляют собой минимальные воспроизводимые примеры.
  • Этот вопрос касается переходов навигации в tabViewBottomAccessory, который появился в iOS 26.
    Эта проблема может быть просто ошибкой SwiftUI, поскольку У tabViewBottomAccessory были другие проблемы, как показано здесь: Условный TabViewBottomAccessory


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

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

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

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

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

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