如何使 SwiftUI 列表行背景颜色扩展整个宽度,包括安全区域之外

Posted

技术标签:

【中文标题】如何使 SwiftUI 列表行背景颜色扩展整个宽度,包括安全区域之外【英文标题】:How can I make a SwiftUI List row background color extend the full width, including outside of the safe area 【发布时间】:2021-01-11 20:25:45 【问题描述】:

在 SwiftUI List 中,如何使列表行背景(通过 .listRowBackground() 设置)扩展视图的整个宽度,即使在安全区域下也是如此?例如。在宽屏 iPhone(例如 iPhone 12 Pro Max)上横向运行时。目前,在安全区域开始之前,该单元格在单元格的最左侧显示为白色。

示例代码:

struct ContentView: View 
    var body: some View 
        List 
            Text("Test")
                .listRowBackground(Color(.systemGray3))
        .listStyle(GroupedListStyle())
    

这会产生如下所示的 UI。我希望单元格的灰色背景可以扩展设备的整个宽度。

我尝试将.edgesIgnoringSafeArea(.all) 添加到Text,但没有任何区别。

【问题讨论】:

我爱你,我的男人......你的代码拯救了我的一天 :) 【参考方案1】:

答案是将.edgesIgnoringSafeArea([.leading, .trailing]) 放在背景Color 本身,而不是列表项。

struct ContentView: View 
    var body: some View 
        List 
            Text("Test").listRowBackground(
                Color(.systemGray3).edgesIgnoringSafeArea([.leading, .trailing])
            )
        .listStyle(GroupedListStyle())
    

【讨论】:

更短的版本是.edgesIgnoringSafeArea(.horizontal) 这不起作用。更改颜色,您将实际应用默认行背景颜色,而不是拉伸文本空间。 这就是问题所在:将背景颜色扩展到安全区域,而不是文本。

以上是关于如何使 SwiftUI 列表行背景颜色扩展整个宽度,包括安全区域之外的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 列表中设置选定的行背景颜色?

SwiftUI - 适合多行文本宽度的内联样式文本背景颜色 SwiftUI

如何在 SwiftUI 中使整个列表行成为 NavigationLink

SwiftUI - 使列表分隔线扩展到触摸屏边缘

SwiftUI:列表的背景颜色不变

如何将 div 扩展到整个页面? [复制]