SwiftUI列表内Button设置opacity后背景未隐藏的解决方法求助
问题描述
在屏幕底部的列表中放置了一个Button,通过opacity属性可成功隐藏按钮文本,但按钮背景仍为白色(如图所示)。希望将文本和背景都隐藏,使按钮完全不可见,且不能在列表上使用.scrollContentBackground(.hidden),因为要保留列表项的背景功能。
代码示例:
List { Section { // ... } Section { // ... } Button(action: { for member in fetchedMembers { managedObjectContext.delete(member) } loadEIPFActive.toggle() deleteAllActive.toggle() }, label: { Text("Delete All") }) .buttonStyle(PlainButtonStyle()) .frame(maxWidth: .infinity, alignment: .center) .foregroundColor(.red) .opacity(deleteAllActive ? 1 : 0) }

解决方案
问题出在opacity仅让按钮内容透明,但按钮对应的列表项背景依然存在。可以通过以下两种方式解决:
方法1:动态设置列表项背景色
给按钮添加.listRowBackground,根据deleteAllActive的状态切换背景色——显示时用系统背景色,隐藏时设为透明:
Button(action: { // 你的点击逻辑 }) { Text("Delete All") } .buttonStyle(PlainButtonStyle()) .frame(maxWidth: .infinity, alignment: .center) .foregroundColor(.red) .opacity(deleteAllActive ? 1 : 0) .listRowBackground(deleteAllActive ? Color(UIColor.systemBackground) : .clear)
方法2:条件渲染按钮
直接根据deleteAllActive的状态决定是否渲染按钮,完全不渲染就不会产生背景块:
List { Section { // ... } Section { // ... } if deleteAllActive { Button(action: { // 你的点击逻辑 }) { Text("Delete All") } .buttonStyle(PlainButtonStyle()) .frame(maxWidth: .infinity, alignment: .center) .foregroundColor(.red) } }
内容的提问来源于stack exchange,提问作者AvsBest
相关产品推荐
相关产品推荐

