SwiftUI列表拖拽/移动项时如何移除背景色?
解决SwiftUI列表长按拖动瞬间背景色残留问题
针对你遇到的「已设置.listRowBackground(Color.clear)但长按准备拖动时仍显示背景色」的问题,本质是系统默认的行高亮交互样式未被覆盖,以下是两种针对性解决方案:
方案1:iOS 16+ 极简解决
直接给列表行添加.highlightColor(.clear),该修饰符可直接覆盖系统长按/选中时的高亮颜色:
ForEach(items) { item in HStack { Text(item.name) .font(.system(size: 16)) .bold() .foregroundColor(.white) .frame(height:56) Spacer() Image(item.imageName) .resizable() .scaledToFit() .frame(width: 24, height: 24) } .listRowInsets(EdgeInsets()) .listRowBackground(Color.clear) .highlightColor(.clear) // 关键:清除长按高亮颜色 }
方案2:兼容iOS 15及以下版本
将列表行用Button包装,通过PlainButtonStyle()移除系统默认的交互高亮样式:
ForEach(items) { item in Button(action: {}) { // 空动作,保留拖动功能的同时覆盖高亮 HStack { Text(item.name) .font(.system(size: 16)) .bold() .foregroundColor(.white) .frame(height:56) Spacer() Image(item.imageName) .resizable() .scaledToFit() .frame(width: 24, height: 24) } } .buttonStyle(PlainButtonStyle()) // 移除默认按钮高亮 .listRowInsets(EdgeInsets()) .listRowBackground(Color.clear) }
补充说明
.listRowBackground仅控制列表行的常态背景,无法覆盖交互状态(长按/选中)的高亮样式;- 两种方案均需保留你原有的
.listStyle(PlainListStyle())设置,避免系统默认的列表样式干扰。
内容的提问来源于stack exchange,提问作者Srinivasan_iOS
相关产品推荐
相关产品推荐

