当将视图包装在 a 中NavigationLink以创建主从流时,NavigationLink似乎添加了我不想要的填充(红色)。
如果我注释掉NavigationLink,一切看起来都是正确的(右图)。然而,这当然使我的观点无法点击。
我该如何去除在手表上渲染此内容时出现的红色填充?
这是我运行的代码:
struct ContentView: View {
let testArray = [1,2,3,4,5]
var body: some View {
ScrollView {
VStack {
ForEach(testArray, id: \.self) { element in
NavigationLink(destination: Text("")) {
Text("BB . . . . . . . . . . . . . . . . . . . . . . .")
.font(.title3)
.foregroundColor(.white)
.background(Color.blue)
}.background(Color.red) //has all the unwanted padding
}
}.background(Color.black)
}.background(Color.gray)
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何将 NavigationLink 放入下面代码中的 swipeActions 部分。代码本身的编译没有任何问题,但是当我点击“编辑”链接时没有任何反应。我的目的是通过点击“编辑”来显示另一个视图。谢谢
var body: some View {
List {
ForEach(processes, id: \.id) { process in
NavigationLink(process.name!, destination: MeasurementsView(procID: process.id!, procName: process.name!))
.swipeActions() {
Button("Delete") {
deleteProcess = true
}.tint(.red)
NavigationLink("Edit", destination: ProcessView(procID: process.id!, procName: process.name!)).tint(.blue)
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试更新旧的应用程序以使用新的 NavigationSplitView 和 NavigationLink,但当侧边栏具有子对象层次结构并且我想从远处更新详细视图时,我试图以正确的方式进行操作子对象。例如,基于 WWDC2022 示例项目 Navigation Cookbook,我尝试了以下操作,但没有成功:
测试应用程序.swift
@main
struct TestApp: App {
@StateObject var appState = AppState()
var body: some Scene {
WindowGroup {
NavigationSplitView {
ProjectListView()
} detail: {
if let chapter = appState.chapter {
ChapterDetailView(chapter: chapter)
} else {
Text("Pick a Chapter")
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
ChapterListView.swift < ProjectListView() 的远亲(向下 3 级)兄弟
List(selection: $appState.chapter) {
ForEach(chapters) { chapter in
NavigationLink(chapter.title ?? "A Chapter", value: chapter)
}
}
Run Code Online (Sandbox Code Playgroud)
appState.swift
class AppState: ObservableObject {
@Published var chapter: …Run Code Online (Sandbox Code Playgroud) swiftui swiftui-navigationlink ios16 swiftui-navigationsplitview ipados16
我正在尝试使用NavigationStack内部NavigationSplitView。
struct ContentView: View {
@State var mainMenu: MenuItem?
@State var subMenu: SubMenuItem?
var body: some View {
NavigationSplitView {
List(MenuItem.allCases, selection: $mainMenu) { item in
NavigationLink(value: item) {
Text(item.rawValue)
}
}
} detail: {
NavigationStack {
List(SubMenuItem.allCases, selection: $subMenu) { item in
NavigationLink(value: item) {
Text(item.rawValue)
}
}
.navigationDestination(for: SubMenuItem.self) { selected in
DetailView(item: selected)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
struct DetailView: View {
let item: SubMenuItem
var body: some View {
Text(item.id)
}
} …Run Code Online (Sandbox Code Playgroud) ios swiftui swiftui-navigationlink swiftui-navigationsplitview swiftui-navigationstack
我有 NavigationStack 及其自己的导航链接,用于 iOS16 开发。
如何更改要显示的默认幻灯片过渡或自定义过渡?
另外,您是否在 NavigationStack 或 NavigationLink 上应用转换?
这是我的代码:
import SwiftUI
struct TestView: View {
var body: some View {
NavigationStack() {
NavigationLink ("Link", value: "Any Value")
.navigationDestination(for: String.self) { textValue in
destinationView(textValue: textValue)
}
}
}
}
struct destinationView: View {
let textValue: String
var body: some View {
Text(textValue)
}
}
Run Code Online (Sandbox Code Playgroud)
如何更改默认转换?
swiftui swiftui-navigationlink swiftui-animation swiftui-navigationsplitview swiftui-navigationstack
我正在尝试在 SwiftUI 中重新创建许多社交媒体应用程序中看到的帐户关注者流程。
\n步骤 3 和 4 可以永远继续下去(下面是另一个例子):
\nMyProfile -> Followers (my followers list) -> FollowerView -> Followers (their followers list) -> FollowerView -> Followers (their followers list) -> FollowerView and so on...\nRun Code Online (Sandbox Code Playgroud)\n然而,通过运行下面的实现,XCode 控制台会打印:
\n\n\n\xe2\x80\x9cmyApp.SomeProfile\xe2\x80\x9d 的 navigationDestination 已在堆栈的较早位置声明。仅使用最接近堆栈根视图声明的目标。
\n
我知道为什么会这样,但不确定如何解决这个问题。我也认为用作值的类型是否NavigationLink合适,因为它是Int。将其替换为更自定义的类型会更好吗?
任何帮助将不胜感激。
\n// Enum with custom options\nenum ViewOptions: Hashable {\n case followers(Int)\n \n @ViewBuilder func view(_ path: Binding<NavigationPath>, …Run Code Online (Sandbox Code Playgroud) ios swift swiftui swiftui-navigationlink swiftui-navigationstack
我有这样的结构
contentView {
navigationView{
foreach {
NavigationLink(ViewA(id: id))
}
}
}
Run Code Online (Sandbox Code Playgroud)
///其中视图A包含一个请求触发器在视图中出现
struct ViewA: View {
@State var filterString: String = ""
var id: String!
@ObservedObject var model: ListObj = ListObj()
init(id: String) {
self.id = id
}
var body: some View {
VStack {
SearchBarView(searchText: $filterString)
List {
ForEach(model.items.filter({ filterString.isEmpty || $0.id.contains(filterString) || $0.name.contains(filterString) }), id: \.id) { item in
NavigationLink(destination: ViewB(id: item.id)) {
VStack {
Text("\(item.name) ")
}
}
}
}
}
.onAppear {
self.model.getListObj(id: self.id) //api request, …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种解决方案来显示披露指示器 V 形,而无需将我的视图包装到NavigationLink. 例如,我想显示指示器但不想导航到新视图,而是显示一个模态。
我找到了很多隐藏指示器按钮的解决方案,但没有一个解决方案解释了如何添加一个。在当前的 SwiftUI 版本中这甚至可能吗?
struct MyList: View {
var body: some View {
NavigationView {
List {
Section {
Text("Item 1")
Text("Item 2")
Text("Item 3")
Text("Item 4")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
例如,我想将披露指示符添加到Item 1而无需将其包装成NavigationLink
我已经尝试使用chevron.rightSF 符号来伪造指标,但该符号与默认的 iOS 符号不 100% 匹配。顶部是默认底部是chevron.right。
用例非常简单。我有一个地点列表,每个地点对应一个地理围栏。我需要在用户位于其地理围栏内的特定行中启用导航。该列表是动态的,是从 API 中获取的。Stackoverflow 上也有类似的问题,但这些问题仅针对静态列表。
我尝试使用布尔字典,但我无法使其工作。
这是一个简化的模拟代码:
struct ListView: View {
@State private var navActive: [UUID: Bool] = [:]
var body: some View {
List (viewModel.allItems, id: \.id) { item in
NavigationLink(destination: DetailView(item), isActive: $navActive[item.id]) {
Text(item.name)
.onTapGesture {
if currentLocation.isInside(item.geofence) { navActive[item.id] = true }
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:无法 在 NavigationLink isActive 参数上将类型 'Binding<Bool?>' 的值转换为预期的参数类型 'Binding<Bool>'。
注意:在接收带有 onRecieve 修饰符的 allItems 时,我已经用键值对填充了 navActive 字典
我使用 SwiftIU 创建了一个 Apple Watch 应用。应用程序的主视图是一个列表,带有到另一个列表的 NavigationLink。当我在内部列表之一中时,后退按钮不在视图的顶部。但是当我从屏幕一侧滑动时(比如在 iOS 上),我会回到主视图。
有没有办法将后退按钮添加回屏幕顶部?新手势是 watchOS 7 的新“后退按钮”吗?
Xcode 12.2(测试版 3)。Apple Watch S6(模拟器,7.1)和 Apple Watch S5(真实,7.0)。SwiftIU 2.0
主要观点:
NavigationView {
List {
ForEach(listsModel.lists) { (list) in
NavigationLink(destination: ListView(list: list)
.environmentObject(list.rowsModel)) {
ListsRowView(list: list)
}
}
}
}
.onAppear {
listsModel.update()
}
.navigationTitle("ListsView.NavigationTitle")
Run Code Online (Sandbox Code Playgroud)
内部观点:
List(rowsModel.rows) { (row) in
RowView(row: row, shouldUpdate: $shouldUpdate)
}
.navigationBarHidden(false)
.onAppear {
instantiateTimer()
rowsModel.update()
}
.onDisappear {
cancelTimer()
}
.onReceive(timer) { _ in
if shouldUpdate {
rowsModel.update()
}
}
.navigationTitle(list.name)
Run Code Online (Sandbox Code Playgroud)
更新:在 Canvas …
swiftui ×10
swift ×4
ios ×3
swiftui-navigationsplitview ×3
swiftui-list ×2
ios16 ×1
ipados16 ×1
padding ×1
watchos ×1
xcode ×1