问题
As you can see from the image I have a TextField and after list.
The list has a transparent background, I'm using .listStyle(SidebarListStyle()).
But how do I get a transparent background where the TextField is located.
Code:
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)
回答1:
You need visual effect view in background (it is used by default for sidebar styled lists)
Demo prepared & tested with 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) {
}
}
and put it to needed area, in this case below 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())
回答2:
You could use on the background Color.white.opacity(0.01) or Color.clear in your case:
.background(
RoundedRectangle(cornerRadius: 5)
.fill(Color.white.opacity(0.01))
or
.background(
RoundedRectangle(cornerRadius: 5)
.fill(Color.clear))
来源:https://stackoverflow.com/questions/63661111/swift-ui-macos-background-transparent-textfield