SwiftUI Plain List 如何删除 iOS16 中的顶部标题填充

2024-04-03

我正在寻找一种方法来删除 SwiftUI 列表中的顶部填充

借助 iOS 15,我们可以做到UITableView.appearance().sectionHeaderTopPadding = 0

然而,在 iOS 16 中,List 已通过 UICollectionView 重新实现 我找不到删除节标题顶部填充的方法

这是示例代码

import SwiftUI

struct TaskRow: View {
    var body: some View {
        Text("Task data goes here")
    }
}

struct HeaderText: View {
    var text:String
    var body: some View {
        Text(text)
            .font(.system(.title3))
            .fontWeight(.bold)
            .foregroundColor(.primary)
    }
}

struct ListWithSections: View {
    init() {
        if #available(iOS 15.0, *) {
            UITableView.appearance().sectionHeaderTopPadding = 0
        } else {
            // Fallback on earlier versions
        }
    }
    
    var body: some View {
        if #available(iOS 16.0, *) {
            List {
                Section(header: HeaderText(text: "Section 1")) {
                    TaskRow()
                    TaskRow()
                    TaskRow()
                }
                
                Section(header: HeaderText(text: "Section 2")) {
                    TaskRow()
                    TaskRow()
                    TaskRow()
                }
                
            }
            .scrollContentBackground(.hidden)
            .background(Color.gray)
            .listStyle(.plain)
        } else {
            List {
                Section(header: HeaderText(text: "Section 1")) {
                    TaskRow()
                    TaskRow()
                    TaskRow()
                }
                
                Section(header: HeaderText(text: "Section 2")) {
                    TaskRow()
                    TaskRow()
                    TaskRow()
                }
                
            }
            .background(Color.gray)
            .listStyle(.plain)
        }
    }
}

iOS 16 和 iOS 15 之间的比较图片

我们可以通过 List Plain 样式来实现它吗?

更新:按照 @Yrb 建议使用 ListRowInset 将提供几乎相同的 UI。然而,当我们滚动时,我们有细微的差别

Here what scroll in ios15 looks like (what I want to achieve in ios16) enter image description here

Here what scroll in ios16 looks like (with listRowInset as @Yrb suggested) enter image description here

提前致谢。

此致。


自 iOS 13 以来,SwiftUI 已经对此进行了原生实现,但没有人谈论它,因为你可以到达并设置UITableView.appearance()。您在 SwiftUI 中处理的是listRowInsets以及 Apple 添加到节标题的填充。本质上,您所做的就是控制所有插图。这是一把双刃剑,因为您现在可以控制一切,您不能只设置一个而将其余的保留为默认值。

您会发现的一件事是,默认值已从 iOS 15 更改为 iOS 16,因此您无法使用相同的数字。在 iOS 16 中,您还需要设置defaultMinListHeaderHeight in .environment.

我还提取了您的部分以节省重复。

struct ListSecHeaderHeightView: View {
    var body: some View {
        List {
            Section(header: SectionView(text: "Section 1")) {
                Text("TaskRow")
                Text("TaskRow")
                Text("TaskRow")
            }
            Section(header: SectionView(text: "Section 2")) {
                Text("TaskRow")
                Text("TaskRow")
                Text("TaskRow")
            }
        }
        .scrollContentBackground(.hidden)
        .environment(\.defaultMinListHeaderHeight, 0) // Only necessary in iOS 16. For 15, use 30
        .background(Color.gray)
        .listStyle(.plain)
    }
}

struct SectionView: View {
    let text: String
    var body: some View {
        HStack {
            Text(text)
                .font(.system(.title3))
                .fontWeight(.bold)
                .foregroundColor(.primary)
        }
        // Set it here.
        // iOS 15:
        // The top goes to -8 to cancel out the padding.
        // The leading goes to 16 as you had the section in line with the rows.
        // iOS 16:
        // The top goes to -20.
        // The leading goes to 20 as you had the section in line with the rows.
        .listRowInsets(EdgeInsets(top: -8, leading: 16, bottom: 0, trailing: 0))
    }
}

最后,请发布最低可重复示例。我们应该能够运行您发布的代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SwiftUI Plain List 如何删除 iOS16 中的顶部标题填充 的相关文章

  • 如何在 Swiftui 中使列表项行内的按钮不可点击?

    有没有办法让列表的整行都不可点击 我正在尝试使按钮行上只有按钮可单击 正如您所看到的 如果我尝试单击按钮行中的任何位置 无论是按钮本身 还是按钮周围的空白区域 它都会将其视为点击 有没有办法让您只能单击按钮本身 而不能单击按钮周围的白色间距
  • Java:如何实现3和?

    我正在研究 3 Sum 来自己实现它 并遇到了以下规则的实现 给定一个由 n 个整数组成的数组 S S 中是否存在满足 a b c 0 的元素 a b c 查找数组中所有总和为零的唯一三元组 注意 三元组 a b c 中的元素必须按非降序排
  • 如何按字段对列表进行排序

    美好的一天 4 你们大家 我有一个对象列表 我的对象喜欢 Product iPhone Category SmartPhone Product HP Category PC Product HTC Category SmartPhone 我
  • python 中的基本矩阵转置

    我尝试了 python 中矩阵转置的最基本方法 但是 我没有得到所需的结果 接下来是代码 A 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 print A def TS A B A for i in range len A
  • Java 阻止列表实现

    我在 SO 和 Google 上搜索了这个问题的答案 但到目前为止找不到合适的解决方案 我目前正在研究图形路由问题中的 LayerManager 管理器负责提供和重置一组固定的层 我想使用阻止列表来实现消费者 生产者模式 以便只要没有可用的
  • 自定义“可搜索”搜索字段 SwiftUI iOS 15

    When using the new searchable modifier in SwiftUI on iOS 15 I have no way to customize the Search Bar appearance Specifi
  • 根据 Mathematica 中的另一个列表值拆分列表

    在 Mathematica 中我有一个点坐标列表 size 50 points Table RandomInteger 0 size RandomInteger 0 size i 1 n 以及这些点所属的聚类索引列表 clusterIndi
  • 将不同类型的对象与可比较的对象进行比较

    A java public class A implements Comparable private String id private String name public A String a String b id a name b
  • 为什么结构中“[0]byte”的位置很重要?

    0 byte在golang中不应该占用任何内存空间 但这两个结构体的大小不同 type bar2 struct A int 0 byte type bar3 struct 0 byte A int 那么为什么这个位置 0 byte这里重要吗
  • Python-使用元组作为列表索引[重复]

    这个问题在这里已经有答案了 我有一个元组列表 tuples list 1 0 2 3 3 2 2 0 我想访问二维数组的元素a例如 使用其中一些元组 for i in range 3 print a tuples list i 应该输出的值
  • 在 ARKit 和 RealityKit 中使用 Raycast 的真正好处是什么?

    RealityKit 和 ARKit 中的光线投射有何用途 我什么时候需要使用makeRaycast查询 https developer apple com documentation realitykit arview 3255315 m
  • python中的列表列表的集合

    我有一个列表列表 mat 1 2 3 4 5 6 1 2 3 7 8 9 4 5 6 我想转换成set即删除重复列表并从中创建一个新列表 其中仅包含unique lists 在上述情况下 所需的答案将是 1 2 3 4 5 6 7 8 9
  • 分配列表的多个值

    我很想知道是否有一种 Pythonic 方式将列表中的值分配给元素 为了更清楚 我要求这样的事情 myList 3 5 7 2 a b c d something myList So that a 3 b 5 c 7 d 2 我正在寻找比手
  • 如何在 JavaFX 中连接可观察列表?

    我所说的串联是指获得一个新列表 该列表侦听所有串联部分的更改 方法的目的是什么FXCollections concat ObservableList
  • 如何在 SwiftUI 中使用带条件检查的按钮进行导航

    Since 导航按钮不再可用 我如何检查条件导航链接为了导航到另一个视图 NavigationLink destination Dashboard userName self userId password self password is
  • 如何使用 SwiftUI 获取多个屏幕上的键盘高度并移动按钮

    以下代码获取键盘显示时的键盘高度 并将按钮移动键盘高度 在转换源 ContentView 和转换目标 SecibdContentView 处以相同的方式执行此移动 但按钮在转换目标处不移动 如何使按钮在多个屏幕上移动相同 import Sw
  • R:ifelse 中的字符串列表

    我正在寻找与 MySQL 中的 where var in 语句类似的东西 我的代码如下 data lt data frame id 10001 10030 cc1 rep c a b c 10 attach data data new lt
  • SwiftUI:动态“列表”中的“切换”在重用时会破坏其布局?

    我试图展现一种动态List行包含Toggle元素 这Toggle最初布局正确 但是当它们滚动进和滚出视图时 即单元格重用时 它们的布局会中断 最小示例代码 import SwiftUI struct SwitchList View var
  • 如何在 flutter 中仅显示列表中的 5 项

    我想在 flutter 中显示一个列表 我正在使用listView 问题是我只想显示 5 个项目 我的意思是当用户向下滚动时我想从开始索引中删除并将另一个小部件添加到包含我的小部件的列表的末尾 但是当我这样做时ScrollView 不会停留
  • 调用 SwiftUI 中位置 #11、#12 处的额外参数 [重复]

    这个问题在这里已经有答案了 我在 SwiftUI 中的切换开关上不断收到 调用中位置 11 12 处有额外参数 错误 我见过其他人有 调用中的额外参数 错误 但答案似乎没有帮助 另外 我的错误是 位置 11 12 我还没有看到其他人发生这种

随机推荐

  • Linq:存储为文本时按日期排序

    我需要按日期排序 但日期以文本形式存储在数据库中 我正在使用 Linq to 实体来执行查询 根据数据库的设计方式 将该列更改为日期列是不可行的 因为该列中有许多不同的数据类型 有一个名为的鉴别器列type所以我会知道特定行是什么类型 您可
  • 使用WebSocket上传大文件

    我正在尝试使用 WebSocket API 上传大文件 至少 500MB 最好达到几 GB 问题是我不知道如何编写 发送文件的这一部分 释放所使用的资源 然后重复 我希望我可以避免使用 Flash Silverlight 之类的东西 目前
  • 在新列中获取具有相似地址的 id

    我有一个数据帧 我从中处理一些列 以获取每个客户 ID 的地址与每个其他客户 ID 的地址的匹配百分比 如果某些地址与其他地址的匹配百分比高于 80 那么我想在新列中收集其相应的客户 ID 我编写了代码 在其中获取元组列表 其中每个元组中都
  • $root 和 $parent 有什么区别?

    我正在学习 KnockoutJS 但我不明白两者之间的区别 root and parent用法 请参见这个jsfiddle http jsfiddle net supercool 2gt4K 27 或下面的代码 div data Value
  • 在家学习共享点[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有没有可以安装并用于家庭学习目的的 sharepoint 家庭 版本 Thanks Microsoft 预配置的 Sharepoint 2007 安装
  • 模拟实体框架核心上下文

    我尝试测试我的应用程序 因此我需要模拟我的 EF 上下文 我的代码似乎没问题 但有以下异常 System ArgumentNullException 值不能为空 参数名称 来源 这是我的测试方法 var options new DbCont
  • python re.sub,仅替换部分匹配[重复]

    这个问题在这里已经有答案了 我对 python 很陌生 我需要通过一个正则表达式匹配所有情况并进行替换 这是一个示例子字符串 gt 期望的结果
  • 如何将内存中的multer文件缓冲区上传到google云存储桶?

    我使用 multer 和 nodejs 来处理多部分表单数据 我不想保存从客户端获得的 req file 我想直接将内存中的文件缓冲区上传到谷歌云存储 但是存储桶 firebase storage 的上传方法只需要一个文件路径作为参数 有什
  • SQL 查询至少其中一项

    我有一群用户 每个用户都有很多帖子 架构 Users id Posts user id rating 如何找到至少有一篇帖子评级高于 例如 10 的所有用户 我不确定是否应该为此使用子查询 或者是否有更简单的方法 Thanks 要查找至少有
  • 我可以让 SQLAlchemy 根据当前外键值填充关系吗?

    这是一些代码 latest version at https gist github com nickretallack 11059102 from sqlalchemy ext declarative import declarative
  • “jQuery 方式”仅用 HTML 和文本的混合替换文本节点?

    在我的 Web 浏览器用户脚本项目中 我只需要替换一个文本节点 而不影响与文本位于同一父节点下的其他 HTML 元素 我需要用多个节点替换它 div foo bar baz img src image png div 需要成为 div a
  • Github Mac 权限问题

    作为新的 Git 用户 我正在使用最新的 Mac 版 Github 当我尝试同步存储库 我首先克隆 然后创建一个新分支 提交更改 然后与 master 合并 时 我收到错误 Authentication Failed You may not
  • 浏览器不会通过 onclick 事件设置 cookie

    尽管我确信这是显而易见的事情 但我还是对这个错误感到恼火 如果是的话 抱歉 以下 JavaScript 成功设置了我的 cookie 但是一旦我将相同的代码绑定到onclick事件 就像这样
  • 这个递归同步调用如何不死锁?

    我有一组方法 它们全部同步到类对象 不能使用 self 因为可以在多个线程中使用该对象的多个实例 其中一些方法调用类中也在类对象上同步的其他方法 不知怎的 这有效并且不会导致我期望的僵局 我假设 testA 将被阻止运行 因为 testB
  • if (设备 == iPad), if (设备 == iPhone)

    所以我有一个通用应用程序 我正在设置一个内容的大小UIScrollView 显然 iPhone 和 iPad 上的内容大小会有所不同 如何为 iPad 设置特定尺寸 为 iPhone 和 iPod touch 设置另一个尺寸 if UI U
  • 解析 SQL 语句的库

    我希望能够解析任意 SQL SELECT 语句并检索各个组成部分 列 关系 JOIN 条件 WHERE 条件 ORDER BY 列 最好使用 Delphi 快速谷歌搜索显示了几种不同的免费软件产品 但尚不清楚它们是否完整和 或正在积极开发中
  • 纬度值无效:必须介于 -90 到 90 之间

    我尝试在我的phonegap应用程序中通过javascript Azure Map创建地图 但出现以下错误 atlas min js api version 1 0 362 未捕获 承诺 错误 无效的 LngLat 纬度值 必须介于 90
  • 如何在 css 动画末尾使用 display:none

    我想在关键帧动画的末尾添加一个 display none 属性 就像这样 sw intro animation introtop animation duration 0 8s animation delay 2s animation fi
  • Python 中的日期差异(以分钟为单位)

    如何计算Python中以下时间戳的时间差 以分钟为单位 2010 01 01 17 31 22 2010 01 03 17 31 22 minutes diff datetime end datetime start total secon
  • SwiftUI Plain List 如何删除 iOS16 中的顶部标题填充

    我正在寻找一种方法来删除 SwiftUI 列表中的顶部填充 借助 iOS 15 我们可以做到UITableView appearance sectionHeaderTopPadding 0 然而 在 iOS 16 中 List 已通过 UI