它得到了深灰色的亮点,我想将其更改为更平滑的东西。 该视图的代码分为两个文件,即Homeview和folderrowview。我将同时添加上下文:
// 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
In
Button
,大多数样式都可以移至自定义List
。
I发现
NavigationLink
上的水平填充无法正常工作,可能是因为Button
剥去了它。但是,它确实有效地填充项目内侧
NavigationStack
.。
修饰符
path
弃用。您可以使用Folder
Hashable
Folder