标签: swiftui-navigationlink

SwiftUI NavigationView 删除空白

我有一个HomeView

NavigationView {
    ZStack {
        VStack {
             NavigationLink(destination: ProfileView()) {
                 if session.userInSession?.activated != 1 {
                     completionText(message: "Complete Your Profile")
                 } else {
                     completionText(message: "Edit Your Profile")
                 }
             }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的ProfileView没有包含在导航视图中,也没有栏标题:

VStack {
    ScrollView(showsIndicators: false) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

但我的ProfileView也可以从我的访问SettingView

NavigationView {
    VStack(alignment: .leading) {
        List {
            NavigationLink(destination: ProfileView()) {
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我ProfileView从设置屏幕访问我的时,它显示正常。但是当我从我的访问它时,HomeView它会在顶部创建空白:

在此输入图像描述

当我通过“设置”时,效果很好:

在此输入图像描述

如何删除上面的空白?

swift swiftui swiftui-navigationlink swiftui-navigationview

8
推荐指数
1
解决办法
3787
查看次数

如何从 SwiftUI 推送到现有的 UINavigationController 堆栈?

我们正在推动SwiftUI嵌入在土地中的视图,UIHostingViewController如下UIKit所示:

首先制作UIViewController

    func hostingController() -> UIViewController {
    let swiftUIView = swiftUIView(viewModel: viewModel(data: [Data, Data, Data]))
    return UIHostingController(rootView: swiftUIView)
}
Run Code Online (Sandbox Code Playgroud)

然后将其压入UINavigationView堆栈:

[self.navigationController pushViewController:hostingViewController animated:YES];
Run Code Online (Sandbox Code Playgroud)

这让我们进入了SwiftUI环境。但是,如果我们的SwiftUI环境有自己的带有NavigationView和的导航堆栈NavigationLink,则原始navigationBar的后退按钮只能导航回原始呈现UIViewController

有没有办法将SwiftUI嵌入的视图推NavigationView送到现有UINavigationController堆栈上?

到目前为止,我们唯一的想法是UIHostingViewController为每个新SwiftUI屏幕创建一个新屏幕,并通过某种委托方法将其推送到堆栈上。

我们正在寻找的是这样的:

UINavigationStack: [UIViewController -> UIViewController -> SwiftUIView -> SwiftUIView]
Run Code Online (Sandbox Code Playgroud)

中的后退<箭头navigationBar将按预期运行。

如果我们可以进一步澄清,请告诉我们!

uinavigationcontroller swift swiftui swiftui-navigationlink swiftui-navigationview

8
推荐指数
1
解决办法
2291
查看次数

从 SwiftUI 中的导航堆栈中删除屏幕

我用来NavigationLinkNavigationView. 如何从导航堆栈中删除屏幕?不仅隐藏导航“后退”按钮,还从堆栈中完全删除屏幕?

例如,我有这样的屏幕链:A -> B -> C 如何删除屏幕B以返回CA

或者,另一个例子,如何删除 screenAB,这样Cscreen 将成为根?

或者说这一切在 SwiftUI 的构想中都是不可能实现的?

swiftui swiftui-navigationlink swiftui-navigationview

8
推荐指数
1
解决办法
6059
查看次数

NavigationView / NavigationLink 自定义过渡方向

我试图NavigationLink从屏幕底部加载视图,而不是从右侧转换,但“明显”的方法(使用 a .transition(.move(edge: .bottom)))似乎没有任何效果。

下面是里面的NavigationView

List {
    ForEach(self.message, id: \.self) { message in
        HStack(alignment: .center) {
            MessageListCell(....)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

MessageListCell

    var body: some View {
        HStack {
            VStack(alignment: .leading, spacing: 0) {
                Text(person.firstName).lineLimit(1)
                    .foregroundColor(.main)
            }
            Spacer()
            NavigationLink(destination: MessageDetail(otherPerson: otherPerson,
                                                   subject: subject,
                                                   profileHandler: { ProfileReducer($0) })
                .transition(.move(edge: .bottom)),
                           tag: 1, selection: $action) {
                NextButton("Proceed")
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

NextButton从屏幕右侧而不是底部点击一致的过渡。我已经尝试过上述方法的变体,但我开始认为这transition可能不是正确的方法。

swiftui swiftui-navigationlink

7
推荐指数
0
解决办法
4914
查看次数

带有 NavigationLink 的 SwiftUI 列表。如何点击时更改突出显示颜色?

我有一个里面有 NavigationLink 的列表。当我点击一行时,它会突出显示。连接到用户界面样式(在 info.plist 中)的颜色,可以是深色或浅色。如何更改此突出显示的颜色?我在这里用“EpmtyView()”和“.buttonStyle()”做出了一些决定,但它们在我的情况下不起作用。使用自定义按钮样式,仅突出显示单元格的内容(例如文本),而不突出显示单元格本身。我认为问题与“selectionStyle”有关,导致“UITableViewCell.appearance().selectionStyle = .none”删除此突出显示。

struct ContentView: View {
    var myArray = ["one", "two", "three"]

    init() {
         UITableView.appearance().backgroundColor = UIColor.clear
    }

    var body: some View {
        NavigationView {
            VStack {
                List {
                    ForEach(self.myArray, id: \.self) { text in
                        NavigationLink(destination: DestinationView()) {
                            MyRow(text: text)
                        }
                        .listRowBackground(Color.black)
                    }
                }.listStyle(GroupedListStyle())
            }.background(Color.black)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
extension UINavigationController {
    override open func viewDidLoad() {
        super.viewDidLoad()
        let standartAppearance = UINavigationBarAppearance()
        standartAppearance.backgroundColor = UIColor.black
        navigationBar.standardAppearance = standartAppearance
        navigationBar.scrollEdgeAppearance = standartAppearance
        navigationBar.compactAppearance = standartAppearance
    }
}
Run Code Online (Sandbox Code Playgroud)

行突出显示

row list highlight swiftui swiftui-navigationlink

7
推荐指数
0
解决办法
5891
查看次数

SwiftUI 通过将 NavigationLink 标签设置为 nil 来关闭视图

我正在尝试在 SwiftUI 中实现编程视图弹出的逻辑

我在项目上设置了一个标签并为所选项目创建了一个相应的变量,但是当我单击 DetaiView 屏幕上的按钮时,没有任何反应。

如果我使用 VStack 而不是 List 或使用presentationMode环境变量来释放屏幕,问题就会消失,但我想使用List。

代码:

struct ContentView: View {
    
    @State var data: [Int] = [1, 2, 3, 4, 5]
    @State var selectedItem: Int? = nil
    
    var body: some View {
        NavigationView {
//            NavigationLink( // This make dismiss work
//                destination: DetailView(selectedItem: $selectedItem),
//                tag: 123,
//                selection: $selectedItem,
//                label: { Text("\(123)") }
//            )
            List { // VStack here make dismiss work
                ForEach(data, id: \.self) { element in
                    NavigationLink(
                        destination: DetailView(selectedItem: …
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-list swiftui-navigationlink

7
推荐指数
1
解决办法
513
查看次数

SwiftUI - List / ForEach 与 NavigationLink 和 isActive 结合使用无法正常工作

我正在尝试在 SwiftUI 中的列表或 ForEach 循环中执行 NavigationLink。不幸的是,我得到了一个非常奇怪的行为(例如,当点击 Leo 时它会打开 Karl,Opening Max 也指向 Karl)。

我已经发现它与 NavigationLink 中的“isActive”属性有关。不幸的是,我需要它在此处实现此行为:https : //i.stack.imgur.com/g0BFz.gif此处也询问SwiftUI - Nested NavigationView: Go back to root

我还尝试使用选择和标签属性,但我无法实现“返回根目录”机制。

这是示例:


import SwiftUI


struct Model: Equatable, Hashable {
    var userId: String
    var firstName: String
    var lastName: String
}


struct ContentView: View {
    
    @State var navigationViewIsActive: Bool = false
    
    var myModelArray: [Model] = [
        Model(userId: "27e880a9-54c5-4da1-afff-05b4584b1d2f", firstName: "Leo", lastName: "Test"),
        Model(userId: "1050412a-cb12-4160-b7e4-2702ab8430c3", firstName: "Max", lastName: "Test"),
        Model(userId: "1050412a-cb12-4160-b7e4-2702ab8430c3", firstName: "Karl", lastName: "Test")] …
Run Code Online (Sandbox Code Playgroud)

foreach list swiftui swiftui-navigationlink

7
推荐指数
1
解决办法
1739
查看次数

SwiftUI NavigationLink 错误(SwiftUI 在推送导航链接时遇到问题。请提交错误。)

控制台错误: SwiftUI 在推送导航链接时遇到问题。请提交错误。

NavigationLink 中不使用 isActive 参数是没有问题的。但是,我必须使用 isActive 参数。因为我相应地关闭了下拉列表。

菜单型号:

struct Menu: Identifiable {
    var id: Int
    var pageName: String
    var icon: String
    var page: Any
    var startDelay: Double
    var endDelay: Double
//    var offsetY: CGFloat
}

let menu = [
    Menu(id: 1, pageName: "Profil", icon: "person.crop.circle", page: ProfileView(), startDelay: 0.2, endDelay: 0.6),
    Menu(id: 2, pageName: "Sepet", icon: "cart", page: CartView(), startDelay: 0.4, endDelay: 0.4),
    Menu(id: 3, pageName: "?stek", icon: "plus.circle", page: ClaimView(), startDelay: 0.6, endDelay: 0.2)
]
Run Code Online (Sandbox Code Playgroud)

菜单视图

struct …
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-navigationlink

7
推荐指数
1
解决办法
1699
查看次数

VideoPlayer 视图可防止 SwiftUI 导航栏隐藏

VideoPlayer当我将view 放入NavigationView的父视图或子视图中时,就会出现问题。在此示例中,子视图将显示导航栏:

struct ParentView: View {
  var body: some View {
    NavigationView {
      VStack {
        Text("Parent View")

        NavigationLink(destination: ChildView().navigationBarHidden(true)) {
          Text("Child View")
        }
      }
      .navigationBarHidden(true)
    }
  }
}

struct ChildView: View {
  var body: some View {
    VStack {
      Text("Child View")
      VideoPlayer(player: AVPlayer())
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

navigationbar avkit navigationview swiftui swiftui-navigationlink

7
推荐指数
1
解决办法
1128
查看次数

为什么 watchOS 选择器总是显示“ScrollView contentOffset 绑定已被读取”警告?

watchOS 的最低限度选择器测试应用程序。

import SwiftUI    
@main
    struct PickerTestApp: App {
        var body: some Scene {
            WindowGroup {
               NavigationView {
                    ContentView()
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

内容视图

import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack{
            NavigationLink(destination: DistanceSelectView()) {
                Text("Next screen")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

距离选择视图

import SwiftUI

struct DistanceSelectView: View {
    
    @State var Age = 1
    
    var body: some View {
        
        VStack {
            Picker(selection: $Age, label: Text("Select your age.[\(Age)]")) {
                ForEach(10 ..< 100, id: \.self) { num in
                    Text("\(num)") …
Run Code Online (Sandbox Code Playgroud)

watchos swiftui swiftui-navigationlink

7
推荐指数
0
解决办法
471
查看次数