我想在 iPad 上删除行后显示空视图(此处:) 。Text("Please select a person.")
目前: iPad 上的详细视图在删除项目后不会更新。 预期:删除所选项目后显示空视图。
struct DetailView: View {
var name: String
var body: some View {
Text("Detail of \(name)")
}
}
struct MainView: View {
@State private var users = ["Paul", "Taylor", "Adele"]
var body: some View {
NavigationView {
List {
ForEach(users, id: \.self) { user in
NavigationLink(destination: DetailView(name: user)) {
Text(user)
}
}
.onDelete(perform: delete)
}
Text("Please select a person.")
}
}
func delete(at offsets: IndexSet) …Run Code Online (Sandbox Code Playgroud) 有没有人有解决以下崩溃的方法?
我有一个通过 NavigationLink 在父导航控制器中显示的表单,如下所示:
var body: some View {
NavigationView {
NavigationLink(destination: PickerView()) {
Text("Picker View")
}
}
}
Run Code Online (Sandbox Code Playgroud)
PickerView 有三个选择器。第一个确定显示其他哪些:
struct PickerView: View {
@State var sectionValue = "pet"
@State var petValue = "dog"
@State var fruitValue = "apple"
@State var foodValue = "pasta"
var body: some View {
Form {
Picker(selection: $sectionValue, label: Text("What is your favorite?")) {
Text("Pet").tag("pet")
Text("Fruits").tag("fruits")
Text("Foods").tag("foods")
}
if (sectionValue == "pet") {
Picker(selection: $petValue, label: Text("Favorite pet")) {
Text("Dog").tag("dog")
Text("Cat").tag("cat")
Text("Lizard").tag("lizard")
}
} …Run Code Online (Sandbox Code Playgroud) 我有一个列表,其中包含推送视图的行。该视图有另一个列表,它推送另一个视图。原来的List,第一个推送的List会随着数据的变化而更新。但是,推送时最后一个视图不会更新。当我向后滑动视图不再更新时,即使它曾经更新过。
HomeView > UserView > ItemView
User 和 Item 是可识别的结构。我试过让它们 Hashable 并使用id: \.self,但这似乎也不起作用。
class App: ObservableObject {
@Published var users = [User]()
}
struct HomeView {
@EnvironmentObject var app: App
var body {
List {
Section {
ForEach(app.users) { user in
NavigationLink(destination: UserView(user: user)) {
Text(user.name)
}
}
}
}
}
}
// Updates fine when `app.users` updates
// Stops updating after going back from ItemView
struct UserView {
let user: User
var body {
List {
Section …Run Code Online (Sandbox Code Playgroud) 我使用此代码来隐藏导航栏和后退按钮,但是当加载视图时,我仍然可以看到后退按钮一小会儿,然后它就消失了。有什么办法可以阻止它被显示吗?
var body: some View {
NavigationView {
NavigationLink(destination: DeferView { WeekView(journey: self.launcher.completeJourney!) }, isActive: self.$launcher.readyJourney ) { EmptyView () }
.navigationBarHidden(true)
.navigationBarTitle("")
}
}
Run Code Online (Sandbox Code Playgroud)
先感谢您,
我正在通过构建一个具有“设置视图”的应用程序来测试 SwiftUI,我们将其称为 ViewB。该视图有一个列表,您可以在其中选择语言。第一个视图 ViewA 有 2 个按钮“打开”或“选择语言”。
我想做的是,从ViewA开始,打开ViewB,选择一种语言,然后自动回到ViewA。这就是我所做的:
视图A
var body: some View {
NavigationView {
VStack(alignment: .center) {
Button(action: start) {
Text("Open")
}
NavigationLink(destination: ViewB()) {
Text("Change language")
}
}
.sheet(isPresented: $presenting) {
DemoView(code: self.langugage ?? "SE") { result in }
}
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我在 ViewB 上取得的进展:
var body: some View {
List(langs) { item in
HStack {
NavigationLink(destination: ViewA(presentingSuccessScreen: self.$isPresentingSuccessScreen, language: item.code)) {
Image(item.icon).resizable().frame(width: 40, height: 40)
Text(item.market)
}.frame(height: 64)
}
.navigationBarTitle(Text("Select Language"), displayMode: .inline)
.navigationBarBackButtonHidden(true)
.navigationBarItems(trailing:
Button("Cancel") …Run Code Online (Sandbox Code Playgroud) 这是测试数据模型:
class Item: Identifiable {
let name: String
init( n: Int) {
self.name = "\(n)"
}
}
class Storage: ObservableObject {
@Published var items = [Item( n: 1), Item( n: 2)]
func reverse() {
items = self.items.reversed()
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的内容视图,其中有一个NavigationLink和一个详细视图,其中有一个反转项目顺序的按钮:
struct ContentView: View {
@ObservedObject
var storage = Storage()
var body: some View {
NavigationView {
List {
ForEach( storage.items) { item in
NavigationLink( destination: Button( action: {
self.storage.reverse()
}) {
Text("Reverse")
}) {
Text( item.name).padding()
}
} …Run Code Online (Sandbox Code Playgroud) 想知道其他人是否也遇到此问题,以及是否找到了解决方法。这在 iOS 13 中工作正常,但在 iOS 14 中似乎被破坏了。我只是想从 .contextMenu 触发到另一个视图的 NavigationLink。
我的代码如下。
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
VStack {
HStack {
Text("I am a text in a HStack ")
}
HStack {
NavigationLink(destination: TestView()) {
VStack {
Image(systemName:"gauge")
.font(.system(size: 31))
}
}
}
}
.contextMenu {
NavigationLink(destination: TestView()) {
Text("Navigate to TestView")
Image(systemName: "pencil")
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Destination TestView() 只是一个样板“Hello World”视图。
如果我没有单击堆栈中关联的图标,则会完美触发导航。但上下文菜单中的相同链接却没有。当我在上下文菜单中选择它时,什么也没有发生。即,我可以选择菜单项,但它所做的只是关闭上下文菜单,并且我保持在同一视图上。
还有其他人发现这个吗?解决了吗?谢谢
struct Testing: View {
var body: some View {
NavigationView{
VStack {
Text("View 1")
Text("View 1.3")
NavigationLink(destination: TestView(),
label: {
Text("View 1 navigation")
})
}
}
}
}
struct TestView: View {
var body: some View {
VStack {
Text("View 2")
}
.navigationBarItems(trailing:NavigationLink(
destination: Text("View 3"),
label: {
Text("Navigate")
}))
}
}
Run Code Online (Sandbox Code Playgroud)
当单击NavigationLinkTestViews 内部时navigationBarItems,它会导航到视图 3。当我单击后退按钮时,它不会返回到 TestView,而是会一直返回到测试。
如何让它返回到上一个视图而不是第一个视图?
我正在使用 Xcode 12。
当我使用 navigationLinks \xe2\x80\x93 深入视图 \xe2\x80\x93 时,我无法通过点击 TabItem 返回到应用程序的根视图,因此如果我点击“所有汽车” ”选项卡并再次点击“主页”,它将显示该视图的最后状态。
\n如何重置视图以显示初始状态?
\nTabView(selection: $selectedTab) {\n HomeView()\n .tabItem {\n if(selectedTab == 0) {\n Image("home_active")\n .frame(height: 28)\n } else {\n Image("home_inactive")\n .frame(height: 28)\n }\n\n Text("HOME")\n }.tag(0)\n\n NavigationView {\n CarsView()\n }\n .navigationBarHidden(true)\n .tabItem {\n if(selectedTab == 1) {\n Image("cars_active")\n } else {\n Image("cars_inactive")\n }\n Text("ALL Cars").foregroundColor(.white)\n }.tag(1)\n}\nRun Code Online (Sandbox Code Playgroud)\n 我从 UIKit 转到 SwiftUI,但在呈现新视图时遇到了 NavigationLink 没有动画的问题。
当以下属性非零时,我已设置视图结构以包含 NavigationLink:
@State private var retrievedDeviceIdentity: Proteus.DeviceIdentity?
Run Code Online (Sandbox Code Playgroud)
Proteus.DeviceIdentity 类型是一个基本数据结构。该属性由成功的异步闭包填充,而不是直接的用户交互。因此,视图结构的设置如下所示,使用 NavigationLink 的destination:isActive:label:初始化程序:
var body: some View {
NavigationView {
VStack {
Form {
// Form building
}
if let deviceIdentity = retrievedDeviceIdentity {
NavigationLink(
destination: AddDeviceLinkDeviceForm(deviceIdentity: deviceIdentity),
isActive: .constant(retrievedDeviceIdentity != nil),
label: {
EmptyView()
}
)
.onDisappear() {
updateSyncButtonEnabledState()
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当retrievedDeviceIdentity填充为非零时,新视图确实会呈现。但是,没有幻灯片过渡到该视图;它会立即改变。在该新视图中时,点击后退按钮确实会幻灯片切换回该视图。
任何想法如何解决这一问题?由于我对 SwiftUI 还很陌生,如果我设置了错误的新结构,那么我也欢迎对此提供反馈。
(我在 macOS Big Sur 11.0.1 上使用 Xcode 12.3。)
swiftui ×10
swift ×4
swiftui-list ×2
animation ×1
contextmenu ×1
ios ×1
ios14 ×1
xcode ×1
xcode12 ×1