SwiftUI macOS 禁用滚动指示器背景

问题描述 投票:0回答:2

我正在寻找一种在 SwiftUI、macOS 中禁用滚动指示器背景(文本编辑器)的方法,以仅显示指示器的移动部分(如弹出窗口),请看下面的示例:

我目前拥有的:

What I currently have

我在寻找什么:

What I'm looking for

macos swiftui
2个回答
3
投票

更新以包含 OP 的反馈,即最初提出的解决方案并未完全消除色调。

在使用 Xcode 14 beta 1 的 Ventura 上,通过在

background
扩展滚动条下的背景之后添加
.scrollContentBackground(.hidden)
修饰符,可以非常接近 [0] 实现所需的效果,

例如

TextEditor(text: $text)
     .scrollContentBackground(.hidden)
     .background(.cyan)

哪里

$text
牛奶木下的一小段给出
Screen shot showing background colour extending under scrollbar

除此之外,据我所知 SwiftUI 的

TextEditor
目前还没有原生 api 可以更接近。不过,作为替代方案 - 如果使用底层
AppKit
组件及其权衡是可以接受的 - 那么更好的样式可能是一个选择。

例如,使用

Introspect
库来启用更现代的覆盖滚动样式:

import Introspect // from https://github.com/siteline/SwiftUI-Introspect
struct ContentView: View {
    @State var text = demoText

    var body: some View {
        TextEditor(text: $text)
            .scrollContentBackground(.hidden)
            .background(.cyan)
            .introspectTextView { (nsV: NSTextView) in
                DispatchQueue.main.async {
                    nsV.enclosingScrollView?.scrollerStyle = .overlay
                }
            }
    }
}

看起来效果相当不错

Text editor with showing scroll bar using using scrollerStyle .overlay

[0] 留下的微妙色调,正如我们所看到的 - 容易被错过 - 或者至少对我来说是这样的:-/


0
投票
TextEditor(text: $text)
     .scrollContentBackground(.hidden)
     .background(.clear)

此代码可以工作 除非带滚轮的鼠标连接到 Mac 而不是触控板。连接鼠标时,滚动条显示白色背景。这种情况在整个操作系统中都会发生。

© www.soinside.com 2019 - 2024. All rights reserved.