按下时如何样式导航链接?

问题描述 投票:0回答:1

它得到了深灰色的亮点,我想将其更改为更平滑的东西。

该视图的代码分为两个文件,即Homeview和folderrowview。我将同时添加上下文:

enter image description here// HomeView snippet var body: some View { NavigationStack { VStack(alignment: .leading, spacing: 8) { HStack { Text("Explore") .font(.title2) Spacer() SortButton(isAscending: $isAscending) // Now properly updates sorting } SearchBar(text: $searchText) .padding(.vertical, 2) //below is the list with the NavigationLink List(filteredFolders) { folder in NavigationLink(destination: DummyFolderDetailView(folder: folder)) { FolderRowView(folder: folder) } } .clipShape(RoundedRectangle(cornerRadius: 8)) .navigationTitle("Folders") } } }

// Component FolderRowView struct FolderRowView: View { let folder: Folder @State private var isHovering = false var body: some View { HStack { // Folder Icon Image(systemName: "folder.fill") .resizable() .scaledToFit() .frame(width: 18, height: 18) .foregroundStyle(.gray) Spacer() // Folder Name Text(folder.name) .font(.body) .frame(maxWidth: .infinity, alignment: .leading) // Chevron Icon Image(systemName: "chevron.right") .foregroundColor(.gray) } .padding(.vertical, 6) .padding(.horizontal, 10) // Added horizontal padding for space around content .background(isHovering ? Color.gray.opacity(0.1) : Color.clear) // Optional background change on hover .scaleEffect(isHovering ? 1.05 : 1.0) // Zoom-in effect .cornerRadius(8) .animation(.easeInOut(duration: 0.2), value: isHovering) // Smooth animation .onHover { hovering in isHovering = hovering } .contextMenu { //(...)

,您可以看到,我已经通过在组件文件中工作,已经成功地将悬停样式和动画添加到行中。 我意识到,自定义媒体样式比这要复杂得多! 我尝试了:

.onTapGesture
在组件文件中使用
@State private var isPressed = false

,该文件在按下正确显示,但会干扰

NavigationLink

以某种方式单击操作不再采取行动:)

    制作第三个组件文件
  • CustomStyle

    包含

    view struct PressableStyle: ButtonStyle
    ,然后添加为the的修饰符,但它并没有真正做任何事情。
    chatgpt建议我尝试创建一个调用the的组件视图,将其嵌套在按钮中,然后嵌入由按钮触发的隐藏
    NavigationLink
    。然后,在
    .buttonStyle(PressableStyle())

    中,我只需要在列表中调用
  • FolderRowLink
  • 视图。我尝试了这一点,但它的结果与第一种方法相同,新闻界出现了新的新闻风格,但点击没有动作。

    
    
    我了解默认情况下默认使用的突出颜色是AccentColor,但是我遇到了一些问题,其中
    FolderRowView
    称呼我的
    NavigationLink
    acentcolor,但是
    HomeView

    称为“深灰色”(默认情况下是默认情况下显示的一种),并将样式修饰符添加到NavigationLink上。 我想我只想知道这是否可能是可能的,你们是如何做的?
  • A

    FolderRowLink
    是一种形式,通常可以使用自定义
    .foregroundStyle(.accent)
    应用样式。不幸的是,当链接在
    Assets.xcassets
    (至少不是Macos)时,这无效。
    不幸的是,自定义仍然适用于a
    .foregroundStyle(Color.accentColor)
    。因此,不要使用
    NavigationLink

    ,而是尝试使用
  • Button
,然后在按下按钮时通过编程进行导航。
我会建议以下更改:

要通过编程方式导航,可以使用
ButtonStyle
初始化。如果您的
List

struct符合

ButtonStyle

,则可以用作路径。
ios swift macos swiftui safari-app-extension
1个回答
0
投票

In

Button
,大多数样式都可以移至自定义
List
I发现
NavigationLink

上的水平填充无法正常工作,可能是因为

Button

剥去了它。但是,它确实有效地填充项目
内侧
NavigationStack
.
修饰符
path

弃用。您可以使用

Folder

,也可以使用圆形矩形作为背景颜色的形状。
  • where是更新的示例,并应用了所有更改:

    Hashable
    Folder
        
    
    
© www.soinside.com 2019 - 2025. All rights reserved.