【问题标题】:SwiftUI NavigationLink doesn't work with SpacerSwiftUI NavigationLink 不适用于 Spacer
【发布时间】:2022-11-05 18:12:29
【问题描述】:

我构建以下视图:

   NavigationView{
        
        VStack(spacing: 120){
            
            HStack{
                Spacer()
                
                NavigationLink(destination: LoginView()){
                    Image(systemName: "person.crop.circle")
                        .resizable()
                        .frame(width: 40, height: 40)
                        .foregroundColor(.primary)
                        .padding()

                }
            }

            VStack{
                Image("pic1")
                    .resizable()
                    .frame(width: 200, height: 160)
                    .padding()
                Image(colorScheme == .dark ? "pic2" : "pic3")
                    .resizable()
                    .frame(width: 200, height: 65)
                    .padding()
                
            }
            Spacer(minLength: 250)
            
        }
        
    }

我需要这个 Spacer(minLength: 250) 来获取左上角的图像(圆圈)。但是当我这样做时,图像不能用作 NavigationLink。当我删除此 Spacer 时,所有内容都居中并且链接有效。我怎样才能把它放在我想要的位置并让链接工作?

【问题讨论】:

  • 看起来您正试图在toolbar 中添加一些东西——您可能想调查一下。使用NavigationView,除非它被明确隐藏,否则视图的顶部保留给导航栏(和工具栏)
  • 您需要将登录按钮放入工具栏(如果您不想要工具栏,则放入右上角导航视图上方的叠加层)并以编程方式调用链接。接下来应该会有所帮助stackoverflow.com/a/63602455/12299030

标签: swift swiftui


【解决方案1】:

使用navigationBarHidden(true)

    NavigationView {
        
        VStack(spacing: 120) {
            
            ...                

            Spacer() // no need for minHeight

        }
        .navigationBarHidden(true) // << here
    }

【讨论】:

    【解决方案2】:

    不确定您的问题是否已解决 但根据您的问题,如果我理解正确,您希望在单击时左上角有Image(systemName: "person.crop.circle"),它应该导航到新的View 如果您希望图像位于右上角,则只需更改 ToolbarItem 的位置 i can't post any images yet so I included a gif link

    这是代码,我使用ToolbarItem 并在其中添加NavigationLink 让我知道这是否有帮助

    干杯,

    城野

        NavigationView{
            VStack(spacing: 120){
                VStack{
                    Image("pic1")
                        .resizable()
                        .frame(width: 200, height: 160)
                        .padding()
                    Image(colorScheme == .dark ? "pic2" : "pic3")
                        .resizable()
                        .frame(width: 200, height: 65)
                        .padding()
                    
                }
                Spacer(minLength: 250)
                
            }
            .toolbar {
                ToolbarItem(placement: .navigationBarLeading){
                    NavigationLink(destination: LoginView()){
                        Image(systemName: "person.crop.circle")
                            .resizable()
                            .frame(width: 40, height: 40)
                            .foregroundColor(.primary)
                            .padding()
    
                    }
                }
            }
    
            
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-23
      • 1970-01-01
      相关资源
      最近更新 更多