列表中的SwiftUI按钮不透明度不适用于其背景

amrnrhlw  于 2023-03-07  发布在  Swift
关注(0)|答案(2)|浏览(95)

我在列表中的屏幕底部有一个按钮。我可以成功地通过不透明隐藏按钮文本,但是背景仍然是白色的,如图所示。我正在尝试删除文本和背景,使其完全不可见。请注意,我确实希望为列表项保留该背景功能。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)

}

htrmnn0y

htrmnn0y1#

我喜欢LuLuGaGa的建议,使用if语句完全删除按钮,但是如果你不喜欢,你可以使用listRowBackground修饰符。
此外,最好将按钮的角色设置为.destructive,而不是指定显式的PlainButtonStyle()foregroundColor(.red)。红色可能不是所有区域性中的适当颜色,如果适当(并且如果不重写按钮样式),.destructive会使按钮变为红色。

Button(role: .destructive) {
                // blah blah blah
            } label: {
                Text("Delete All")
            }
            .frame(maxWidth: .infinity, alignment: .center)
            .opacity(deleteAllActive ? 1 : 0)
            .listRowBackground(deleteAllActive ? nil : Color.clear)
2w3rbyxf

2w3rbyxf2#

如果我没理解错你的问题,你可以用if:

if deleteAllActive {
   Button(
       role: .destructive,
       action:  {
           //...
       },
       label:  {
           Text("Delete All")
       }
   )
   .frame(maxWidth: .infinity, alignment: .center)
}

相关问题