[Xcode 14.1,iOS 16.1] 我有一个带有 navigationTitle 的 NavigationStack 和一个带有 2 个视图的 TabView。每个View都有一个ScrollView(见下图):
NavigationStack 和 TabView 问题图片
当我点击 Tab1(上图中红色的#1),然后向上滑动时,行为符合预期(#2),即大的 navigationTitle 移动到中心,而我的视图经过下方并变得模糊。完美的。然而,当我点击 Tab2 (#3) 然后向上滑动 (#4) 时,大标题仍然很大,并且视图不会变得模糊。然后我再次点击 Tab1 (#5),它按预期工作。
请帮忙!
这是我的代码:
内容查看:
import SwiftUI
struct ContentView: View {
@State private var selection: Tab = .tab1
enum Tab {
case tab1
case tab2
}
@State private var mainTitle = "Tab1"
var body: some View {
NavigationStack {
TabView(selection: $selection) {
Tab1(mainTitle: $mainTitle)
.tabItem {
Label("Tab1", systemImage: "wrench.adjustable.fill")
}
.tag(Tab.tab1)
Tab2(mainTitle: $mainTitle)
.tabItem {
Label("Tab2", …Run Code Online (Sandbox Code Playgroud) 有了这段代码,为什么 navigationBarItem 没有显示出来?该视图在工作表中被调用,但这在之前并不重要......
struct ChangePasswordView: View {
@Environment(\.presentationMode) private var presentationMode
@State private var passwordNew = ""
@State private var passwordNewAgain = ""
var body: some View {
ScrollView {
changePassword
}
.navigationBarItems(leading: backButton)
.navigationBarItems(trailing: finishButton)
}
var backButton: some View {
Button(action: { self.presentationMode.wrappedValue.dismiss() }) {
Text("Cancel")
}
}
var finishButton: some View {
Button(action: {
self.changePasswordGlobally()
self.presentationMode.wrappedValue.dismiss()
}) {
Text("Apply")
}
.disabled(self.passwordNew.isEmpty || self.passwordNew != self.passwordNewAgain)
.disableAutocorrection(true)
}
}
Run Code Online (Sandbox Code Playgroud)
正如您在以下屏幕截图中看到的那样,应该引导的 navigationBarItem 没有显示:
如何在没有任何交互的情况下在 swiftUI 中 x 秒后推送视图?
NavigationView{
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now()+1.0) {
NavigationLink(destination: pageViewUi()) {
EmptyView()
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我已将登录页面缩减为一个导航链接,该导航链接将列表视图作为其目的地。如下图所示,问题在于,我得到的标题不是左侧间隔良好的标题,而是右侧所示的巨大空间。两种视图都是相同的,但右侧的视图是页面设计时的预览。左图是登录屏幕后的页面预览。
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink(destination: CustomerView()) {
Text("login")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是列表视图的代码:
var body: some View {
NavigationView {
VStack {
SearchBarView(text: $searchText)
.padding(.top, 0)
List {
ForEach(customers.filter({searchText.isEmpty ? true : $0.name.localizedCaseInsensitiveContains(searchText)})) { customer in
NavigationLink(destination: CustomerDetailView(customer: customer)) {
CustomerRow(customer: customer)
}
.navigationBarTitle("Customers")
}
}
}
}
.navigationBarBackButtonHidden(true)
}
}
Run Code Online (Sandbox Code Playgroud) 我的列表单元格中有两个 NavigationLink
我想在点击一次时转到目的地 1,在点击两次时转到目的地 2。所以我添加了两个点击手势来控制导航。
但是当我点击时,有两个问题:
这是我的代码:
struct MultiNavLink: View {
@State var mb_isActive1 = false;
@State var mb_isActive2 = false;
var body: some View {
return
NavigationView {
List {
ZStack {
NavigationLink("", destination: Text("Destination1"), isActive: $mb_isActive1)
NavigationLink("", destination: Text("Destination2"), isActive: $mb_isActive2)
Text("Single tap::go to destination1\nDouble tap,go to destination2")
}
.onTapGesture(count: 2, perform: {()->Void in
NSLog("Double tap::to destination2")
self.mb_isActive2 = true
}).onTapGesture(count: 1, …Run Code Online (Sandbox Code Playgroud) 我的原始部分只有一个 Text 对象。当我将其替换为 NavigationLink 以便点击它会导致另一个视图时,该部分的大小突然增大,同时添加了填充和边距。我已经尝试过 .padding(0) 和我能想到的所有其他方法,但 NavigationLink 坚持是一个超大的气泡。
var body: some View {
List {
Section(header:
NavigationLink("Section Title", destination: OrgChooserView())) {
ForEach(model.metrics, id: \.displaySequence) { metric in
MetricRowView(metric: metric)
}
}
}
.navigationTitle("Test").accentColor(.orange)
}
Run Code Online (Sandbox Code Playgroud)
在部分中使用导航链接:
章节中包含文本:
如果您能在删除节标题周围的可见气泡或调整其填充和边距方面获得任何帮助,我将不胜感激。
谢谢。
我\xc2\xb4m 创建一个应用程序并NavigationLink在 Swift/SwiftUI 中使用,但它不再工作了。我现在不知道从什么时候开始,但两三周前,一切都工作正常。它NavigationLinks已经在代码中存在了更长的时间,工作正常。但今天我用了新的,但它们不起作用。它会在模拟器和真实设备上查看它们是否被禁用或其他情况。它们是灰色的,您无法单击它们,或者即使单击它们,也不会发生任何情况。有什么解决办法吗?
import SwiftUI\n\nstruct MedikamenteView: View {\n var body: some View {\n Form {\n NavigationLink(\n destination: ASSView(),\n label: {\n Text("ASS")\n })\n NavigationLink(\n destination: AdrenalinView(),\n label: {\n Text("Adrenalin")\n })\n }\n }\n}\n\nstruct MedikamenteView_Previews: PreviewProvider {\n static var previews: some View {\n MedikamenteView()\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n例如,这个工作正常:
\nimport SwiftUI\n\nstruct RechtView: View {\n var body: some View {\n Form {\n NavigationLink(\n destination: ParagraphenView(),\n label: {\n Text("Paragraphen")\n })\n NavigationLink(\n destination: AufklaerungEinwilligungView(),\n label: {\n Text("Die Aufkl\xc3\xa4rung mit nachfolgender Einwilligung")\n …Run Code Online (Sandbox Code Playgroud) 我有一个LazyVGrid里面的NavigationView。
NavigationView {
ScrollView {
LazyVGrid(columns: columns) {
ForEach(items) { item in
NavigationLink(tag: item, selection: $displayedItem) {
DetailView(item)
} label: {
GridItemView(item)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
引用的变量在视图上定义如下:
@State var displayedItem: Item?
let columns: [GridItem] = Array(repeating: .init(.flexible()), count: 2)
Run Code Online (Sandbox Code Playgroud)
现在我想显示特定项目的详细视图。我通过简单地将此项分配给displayedItem属性来做到这一点:
func showDetailView(for item: Item) {
displayedItem = item
}
Run Code Online (Sandbox Code Playgroud)
LazyVGrid当我调用此函数时相应项目可见时,这非常有效。但是,当该项目不可见时,我首先需要滚动到该项目才能NavigationLink触发。我知道为什么会发生这种情况(因为项目是延迟加载的,毕竟它是一个惰性LazyVGrid网格),但我不知道如何在需要时加载特定项目。
我还尝试通过将整个内容包装ScrollView在 a 内ScrollViewReader并附加以下修饰符以编程方式滚动到目标项目:
.onChange(of: displayedItem) { item in
if let item = …Run Code Online (Sandbox Code Playgroud) 我有一个这样的模型...
struct User: Codable {
let followersCount: Int
let followingCount: Int
}
Run Code Online (Sandbox Code Playgroud)
使用 NavigationStack 我希望能够使用基于 Value 的 NavigationLink
NavigationLink(value: user.followersCount) {
Text("Followers")
}
NavigationLink(value: user.followingCount) {
Text("Following")
}
.navigationDestination(for: Int.self) { _ in
FollowersView()
}
.navigationDestination(for: Int.self) { _ in
FollowingView()
}
Run Code Online (Sandbox Code Playgroud)
因为这两个值都是 Int。有没有办法区分两者?
swiftui swiftui-navigationlink ios16 swiftui-navigationstack
我在我的代码中实现了标签栏。我在第一个选项卡中看到了所有按钮,我想从该按钮以编程方式切换到第二个选项卡。当我使用 navigationView 时,它会创建另一个标签栏并移动到该屏幕,这会更改 swiftui 中的导航索引。
struct AppTabNavigation: View {
@State var selection: Tab = .dashboard
var body: some View {
TabView(selection: $selection) {
NavigationView {
FirstTabView()
}.navigationBarHidden(true)
.navigationBarBackButtonHidden(true)
.navigationViewStyle(StackNavigationViewStyle())
.tabItem {
Label("Home", systemImage: "house.fill")
.accessibility(label: Text("Home"))
}
.tag(Tab.home)
NavigationView {
SecondView()
}.navigationBarHidden(true)
.navigationBarBackButtonHidden(true)
.navigationViewStyle(StackNavigationViewStyle())
.tabItem {
Label("Home", systemImage: "house.fill")
.accessibility(label: Text("Home"))
}
.tag(second)
}
}
}
Run Code Online (Sandbox Code Playgroud)
导航代码:
NavigationLink(destination: AppTabNavigation(selection: Tab.home), isActive: self.$isActiveTabbar){
Text("")
} .isDetailLink(false)
Run Code Online (Sandbox Code Playgroud)