如何解决Swift UI MacOS背景透明TextField
从图像中可以看到,我有一个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)
解决方法
您需要在后台使用视觉效果视图(默认用于侧边栏样式列表)
使用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())
,
您可以在背景中使用Color.white.opacity(0.01)或Color.clear:
.background(
RoundedRectangle(cornerRadius: 5)
.fill(Color.white.opacity(0.01))
或
.background(
RoundedRectangle(cornerRadius: 5)
.fill(Color.clear))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。