如何让NSScrollView中的Scroller背景透明?

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

我使用 Storyboard 来设置 NSScrollView,但找不到任何可以禁用滚动条背景的选项。关于如何实现这一点有什么想法吗?

NSScroller Background Color

swift macos nsscrollview nsscroller
5个回答
3
投票

这背后的基本思想是子类化 NSScroller,然后进行相应的更改。

我有相同的要求,所以我将其子类化并进行了如图所示的更改。 Objective C代码是在在线工具的帮助下转换的,所以对错误表示歉意 并看看。

这可能有帮助。

//  Converted to Swift 4 by Swiftify v4.1.6766 - https://objectivec2swift.com/
//  GridScroller.h
//  Created by Vikram on 08/09/16.

import Cocoa

class OpaqGridScroller: NSScroller {
    override func draw(_ dirtyRect: NSRect) {
        super.draw(dirtyRect)
        NSColor.clear.setFill()
        dirtyRect.fill()
        // whatever style you want here for knob if you want
        knobStyle = .dark
    }
}

1
投票

您可以尝试覆盖绘制滚动条矩形

override func draw(_ dirtyRect: NSRect) {
    NSDrawWindowBackground(bounds);
    self.drawKnob()
}

您始终可以通过之前设置来绘制自定义矩形颜色

override func draw(_ dirtyRect: NSRect) {
    NSColor.clear.set()
    __NSRectFill(dirtyRect)

    self.drawKnob()
}

1
投票

这个解决方案对我有用。

class OpaqueGridScroller: NSScroller {
    override func draw(_ dirtyRect: NSRect) {
        // NSColor.clear.set()
        // dirtyRect.fill()
        self.drawKnob()
    }
}

0
投票

前述调用

self.drawKnob()
的答案仅部分正确。 问题是,如果没有任何东西可以朝该方向滚动,通常根本不应该绘制旋钮。

对于我的解决方案,我在滚动 NSTextView 中对垂直 NSScroller (滚动条)进行了子类化,以便覆盖滚动条的

draw()
方法,如上所述。 但是,当没有任何内容可滚动时,这会绘制一个长度不正确的旋钮。

所以我添加了

 @IBOutlet var myScroller : NSScrollView!

作为子类 NSScroller 的属性并将其连接到 Storyboard 中,以便滚动条可以知道使用它的 NSScrollView,然后使用

绘制滚动条
override draw(_ dirtyRect: NSRect)
{
    if myScroller.contentSize.height < myScroller.documentView!.bounds.height {
        self.drawKnob()
        }
}

当 NSScrollView 的大小调整到足够大以至于没有任何垂直滚动的东西时,旋钮会消失,并且当有垂直滚动时会重新出现,同时允许其下方背景中的任何内容显示出来。

我不确定这是否是黑客攻击,或者是正确的解决方案,但它似乎按预期工作。


0
投票

我知道这是一个老问题,但我只是找到了我认为更好的解决方案。 您可以只覆盖

drawKnobSlot
函数而不执行任何操作,如以下代码:

import Cocoa

final class CustomScroller: NSScroller {
    override func drawKnobSlot(in slotRect: NSRect, highlight flag: Bool) {
    }
}

苹果的文档对此方法的解释:

绘制滚动条轨道的一部分,可能包括位于给定矩形内的行增量和减量箭头按钮。

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