列表上下文中 SwiftUI 按钮的样式差异:iOS 15 与更早版本

Posted

技术标签:

【中文标题】列表上下文中 SwiftUI 按钮的样式差异:iOS 15 与更早版本【英文标题】:Styling differences in SwiftUI Button in list context: iOS 15 vs. earlier 【发布时间】:2021-10-02 19:42:27 【问题描述】:

用这个例子:

struct ContentView: View 
    let items = ["Hello, world!"]
    var body: some View 
        List 
            Button(action: 
            , label: 
                Text("Hello, world!")
            )
            .listRowBackground(Color.gray)
        
    

ios 14 上,这看起来像:

在 iOS 15 上,它现在看起来像:

样式差异的数量相当令人惊讶:

    圆角:在 iOS 15 中,但不是更早的版本 文字颜色:iOS 15 早期为蓝色和白色。 视图的宽度——在 iOS 15 中要窄得多

这只是 iOS 15 的预期变化吗?

是否有不发生这些变化的标准方法?即,保留早期的样式?

【问题讨论】:

Apple 会在每个新的操作系统版本中定期更改 UI 样式,因此只要您使用默认样式,您的应用程序就会在操作系统上以原生方式显示。如果您想拥有独特的持久风格,请在任何地方开发和使用基于低级 UI 原语的完全自定义 UI。 什么low level UI primitives?斯威夫特? UIKit?我还没有在 UIKit 中经历过如此大的变化。您知道说明这些更改的文档吗? 【参考方案1】:

是的,Apple 已更改其默认 UI 元素状态。这也可以在 Safari 中看到,其中网页没有用于表单的 CSS。

【讨论】:

你知道这些州的文件吗? 我没有看到苹果的任何“更改文档”,但要更改 UI,您只需将其从默认状态更改【参考方案2】:

帮助我的具体答案是使用.listStyle。在我的原始代码中,我没有使用.listStyle,显然默认值已更改。所以,如果我这样做:

struct ContentView: View 
    let items = ["Hello, world!"]
    var body: some View 
        List 
            Button(action: 
            , label: 
                Text("Hello, world!")
            )
            .listRowBackground(Color.gray)
        
        .listStyle(PlainListStyle())
    

我得到的结果更接近我想要的。

显然.listStyle 默认现在是insetGrouped,这不是我想要的。

【讨论】:

以上是关于列表上下文中 SwiftUI 按钮的样式差异:iOS 15 与更早版本的主要内容,如果未能解决你的问题,请参考以下文章

swiftui 列表部分中的圆角

iOS |斯威夫特 |按钮在 HStack 中不起作用 |我该如何解决这个问题,有解决方法吗?

SwiftUI - HStack NavigationLink“按钮”分别向两个元素添加按钮样式?

在 swiftUI 列表中添加、选择和删除文件名 - MacOS

如何在基于 SwiftUI 的 iOS 应用中呈现连续视图?

自定义按钮样式 (SwiftUI) tvOS