【问题标题】:Swift ui macos background transparent TextFieldSwift ui macos 背景透明TextField
【发布时间】:2020-12-19 00:01:14
【问题描述】:

从图片中可以看出,我有一个TextField,在list 之后。

列表有透明背景,我用的是.listStyle(SidebarListStyle())

但是如何获得TextField所在的透明背景。

代码:

VStack(alignment: .leading, spacing: 0) {

    TextField("Username", text: $username)
    .padding(.leading, 20)
    .padding(.trailing, 20)
    .background(
        RoundedRectangle(cornerRadius: 5)
            .fill(Color.white.opacity(0.3)
        )
        .padding(.leading, 20)
        .padding(.trailing, 20)
    )
    .padding(.top)
    .padding(.bottom)

    List(restaurants) { restaurant in
        RestaurantRow(restaurant: restaurant)
    }.listStyle(SidebarListStyle())

}.padding(0)
.frame(width: 400.0, height: 400.0, alignment: .top)

【问题讨论】:

  • 透明背景有什么用?
  • @Asperi:在输入字段的地方有单词 leo,在输入字段后面有你看到的黑色背景,我希望它像你在列表中看到的那样透明.

标签: swift swiftui


【解决方案1】:

您可以在背景上使用 Color.white.opacity(0.01) 或 Color.clear 在您的情况下:

     .background(
       RoundedRectangle(cornerRadius: 5)
       .fill(Color.white.opacity(0.01))
     

      .background(
        RoundedRectangle(cornerRadius: 5)
        .fill(Color.clear))
   

【讨论】:

  • 不行,我说的是textfield所在的暗部。
  • Textfield 后面有什么,后面的列表不是吗?
【解决方案2】:

您需要在后台显示视觉效果视图(默认情况下用于侧边栏样式列表)

使用 Xcode 11.4 / macOS 10.15.6 准备和测试的演示

struct VisualEffectView: NSViewRepresentable {
    func makeNSView(context: Context) -> NSVisualEffectView {
        let view = NSVisualEffectView()

        view.blendingMode = .behindWindow    // << important !!
        view.isEmphasized = true
        view.material = .appearanceBased
        return view
    }

    func updateNSView(_ nsView: NSVisualEffectView, context: Context) {
    }
}

并将其放到需要的区域,在本例中为TextField下方

    TextField("Username", text: $username)
    .padding(.leading, 20)
    .padding(.trailing, 20)
    .background(
        RoundedRectangle(cornerRadius: 5)
            .fill(Color.white.opacity(0.3)
        )
        .padding(.leading, 20)
        .padding(.trailing, 20)
    )
    .padding(.top)
    .padding(.bottom)
    .background(VisualEffectView())

【讨论】:

  • Thx,它似乎有效,所以我放入的每个元素都必须有正确的背景?我发现了这个:developer.apple.com/design/human-interface-guidelines/macos/…
  • 如果需要,您可以将其设为整个内容视图的通用背景视图。
  • 你说通过修改AppDelegate?
  • 不,而是ContentView
  • 我可以问你怎么了,为什么.listStyle(SidebarListStyle())给我一个奇怪的问题在名单上,所以我想把它去掉。
猜你喜欢
  • 1970-01-01
  • 2015-05-26
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
  • 2011-03-08
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多