我正在尝试使用 Apple 的SwiftUI制作一个应用程序,我需要有两个按钮在List一行中显示两个不同的视图。
我使用Xcode beta 7和MacOS Catalina beta 7。我试图添加一个Button呈现视图但是,我无法点击它,当我尝试在一个简单的Button外部List并点击它时,该AddList()视图没有出现。我也试过添加一个navigationButton内部,navigationButton但它也不起作用。tapAction单击它时添加一个也不起作用,视图仍然没有出现
NavigationView {
List(0..<5) { item in
NavigationLink(destination: ContentOfList()) {
Text("hello") // dummy text
Spacer()
Text("edit")
.tapAction {
AddList() // This is the view I want to present
}
}
}.navigationBarItems(trailing: NavigationLink(destination: AddList(), label: { // doesn't work within navigationBarItems
Image(systemName: "plus.circle.fill")
}))
}
Run Code Online (Sandbox Code Playgroud)
我希望AddList()视图出现,但在这两种情况下,它没有。
我用来在 NavigationView 中SwiftUI创建从行到详细视图(类似于教程https://developer.apple.com/tutorials/swiftui/building-lists-and-navigationNavigationLinks中所做的操作)。但是,当我在应用程序中进行测试时,NavgiationLink 在被点击后立即从详细视图导航回上一个视图(详细视图仅显示一秒钟)。
这是代码:
struct ItemsView: View {
var body: some View {
NavigationView {
VStack {
List {
ForEach(Query.items) { item in
NavigationLink(destination: ItemDetail(item: item)) {
ItemRow(item: item)
}
}
}
Spacer()
}
.navigationBarTitle(Text("Items"))
}
}
}
private struct ItemRow: View {
var item: Item
var body: some View {
VStack(alignment: .leading) {
Text(item.title)
.font(.headline)
item.completionDate.map({
Text("Created \($0.shortDateTime)")
})
item.completionDate.map({
Text("Active \(Date().offsetString(from: $0)) ago")
})
}
}
}
struct ItemDetail: View {
var …Run Code Online (Sandbox Code Playgroud) navigation realm swiftui ios-navigationview swiftui-navigationlink
我有一个 NavigationView 列表。
在黑暗模式下,雪佛龙(红色圆圈)几乎不可见。
struct ContentView: View {
var body: some View {
NavigationView{
List {
Line(text: "Line 1")
Line(text: "Line 2")
Line(text: "Line 3",selected: true)
Line(text: "Line 4")
Line(text: "Line 5")
}
}
}
}
struct Line: View {
var text :String
var selected = false
@Environment(\.colorScheme) var colorScheme
var body: some View {
NavigationLink(destination: Text("D")) { Text(text)}
.listRowBackground(selected ? Color.blue : Color(.systemBackground))
.foregroundColor(selected ? Color.white : Color(.label))
.onTapGesture(perform: {print ("tap")
} )
}
}
Run Code Online (Sandbox Code Playgroud) 当我在视图中调用 NavigationImageView 时,我想在每次调用中发送不同的视图,这样我就可以导航不同的视图。但问题是如何在 NavigationLink 中发送视图参数。我尝试了 View 和 UIView 但它给了我错误。
struct NavigationImageView: View {
var item : Store
var destinationView: View
var body: some View {
NavigationLink(destination:destinationView ) {
Image(uiImage: (item.banner?.url)!.load())
.resizable()
.aspectRatio(CGFloat((item.banner?.ratio)!), contentMode: .fit)
.cornerRadius(12)
.shadow(radius: 4)
.frame(width: CGFloat(UIScreen.main.bounds.width * 0.9), height: CGFloat((UIScreen.main.bounds.width / CGFloat((item.banner?.ratio) ?? 1))))
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有两个用 swiftUI 编写的视图,例如 ViewA 和 ViewB。ViewA 的 nonAppear() 有一个 apiCall,它在最初加载视图时调用。\n我使用导航链接从 ViewA 导航到 ViewB 并单击 ViewB 中的后退按钮ViewA 的 onAppear() 被调用。
\n\xe2\x80\xa2 从视图导航回来时有什么方法可以停止调用 onAppear()
\n\xe2\x80\xa2 我正在 swiftUI 中寻找 UIKit 中类似“ViewDidLoad”的东西\n给定我的代码示例
\nstruct ContentView: View {\n var body: some View {\n NavigationView{\n List(viewModel.list){ item in\n NavigationLink(\n destination: Text("Destination"),\n label: {\n Text(item.name)\n })\n }\n .onAppear{\n viewModel.getListApiCall()\n }\n \n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n 我在使用 SwiftUI 时遇到文本字段和导航视图/链接的奇怪问题
我所做的就是使用导航链接浏览视图,并且目标视图内有一些文本字段。当我点击其中任何一个时,导航会自动关闭。
当点击文本字段并显示键盘时,如何修复导航链接消失的问题?
var emailLoginButton: some View {
NavigationLink(destination: LoginView(viewModel: .init(mode: .login, isPushed: $viewModel.authViewPushed)), isActive: $viewModel.authViewPushed) {
Button(action: { viewModel.authViewPushed = true }) {
HStack {
Image(systemName: "envelope")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 20, height: 20)
.foregroundColor(.white)
Text("continue_with_email".localized())
.padding(.horizontal, 20)
}
}
.padding()
.frame(maxWidth: .infinity)
.foregroundColor(.white)
.background(Capsule().fill(Color.primaryPurple))
.shadow(color: Color.black.opacity(0.15), radius: 5, x: 5, y: 5)
.padding(.horizontal)
.padding(.bottom, 20)
}
.isDetailLink(false)
}
// Destination's view textfield which "dismisses" navigationLink
var emailTextField: some View {
HStack {
Image(systemName: "envelope")
.font(.title2)
.foregroundColor(.primary) …Run Code Online (Sandbox Code Playgroud) 自 Xcode 12.5 以来,我看到很多“无法呈现。请提交错误”。console 登录 Xcode 控制台,我记得在 12.5 之前没有看到过。
当我NavigationLink从父视图导航到子视图,并且子视图中的逻辑更新父视图所依赖的状态之一时,会显示此消息。
下面是一个示例伪代码,其中消息列表显示在父视图中,消息详细信息显示在列表的子视图中,最后是独立设置子视图。
struct MessageListView: View {
...
@StateObject var messageList = MessageList()
var body: some View {
debugPrint("!!MessageListView has been redrawn!!")
return VStack {
NavigationLink(destination:SettingsView()){
Text("Go to settings")
}
ForEach(messageList.data.sorted(by: {$0.key < $1.key}), id:\.key) { k, m in
NavigationLink(destination:MessageView(message:...){
Text(m.text)
}
}
}
}
}
struct MessageView: View {
...
@ObservedObject var messageList : MessageList
@ObservedObject var message : Message
...
var body: some View {
Text(...)
.onAppear { …Run Code Online (Sandbox Code Playgroud) xcode swift swiftui swiftui-navigationlink swiftui-navigationview
下面的代码在 WatchOS 7 和 8.0 中运行良好,但现在在 8.1 中,点击该行将导航到目的地,但随后立即导航回根视图。
我提交了反馈#FB9727188,并包含以下内容来演示该问题。
struct ContentView: View {
@State var tabIndex:Int = 0
var body: some View {
TabView(selection: $tabIndex) {
ListView()
.tabItem { Group{
Text("List")
}}.tag(0)
.padding(.bottom, 1.0)
Text("Second View")
.tabItem { Group{
Text("Second")
}}.tag(1)
.padding(.bottom, 1.0)
Text("Third View")
.tabItem { Group{
Text("ThirdView")
}}.tag(2)
}
}
}
struct ListView: View {
var body: some View {
List {
ForEach((1...10).reversed(), id: \.self) {_ in
NavigationLink(destination: Text("test")) {
Text("Tap Me but we'll just be back here") …Run Code Online (Sandbox Code Playgroud) NavigationLink(destination: DetailView()) {
Image(systemName: "cloud.heavyrain")
.foregroundColor(Color.accentColor)
.font(.system(size: 66, weight: .regular))
}
.buttonStyle(PlainButtonStyle())
Run Code Online (Sandbox Code Playgroud)
在此示例中,.buttonStyle(PlainButtonStyle()) 修饰符将突出显示更改为非常温和但仍然可见的效果。
我试图NavigationSplitView与其中DetailView包含taskor 的a 一起使用onAppear,但它似乎只运行一次。
enum MenuItem: String, Hashable, Identifiable, CaseIterable {
case menu1
case menu2
case menu3
case menu4
case menu5
var id: String { rawValue }
}
struct ContentView: View {
@State var selection: MenuItem?
var body: some View {
NavigationSplitView {
List(MenuItem.allCases, selection: $selection) { item in
NavigationLink(value: item) {
Text(item.rawValue)
}
}
} detail: {
if let selection {
DetailView(menuItem: selection)
} else {
Text("Default")
}
}
}
}
struct …Run Code Online (Sandbox Code Playgroud) swiftui ×10
swift ×4
apple-watch ×1
ios ×1
navigation ×1
realm ×1
swiftui-navigationsplitview ×1
textfield ×1
watchos-8 ×1
xcode ×1