Как сделать фон Scroller прозрачным в NSScrollView?

Я использовал раскадровку для настройки NSScrollView и не могу найти ни одной опции, где я могу отключить фон скроллера. Любые идеи о том, как это сделать?

Цвет фона NSScroller


person dbrownjave    schedule 27.06.2018    source источник
comment
Подкласс NSScroller.   -  person El Tomato    schedule 27.06.2018
comment
Да, у меня есть подкласс NSScroller, но AutoHideScroller не работает...   -  person dbrownjave    schedule 27.06.2018
comment
На какую версию macOS вы ориентируетесь?   -  person Jake3231    schedule 01.08.2018
comment
версия 10.13.5   -  person dbrownjave    schedule 01.08.2018


Ответы (3)


Основная идея заключается в том, чтобы создать подкласс NSScroller и затем внести соответствующие изменения.

У меня было такое же требование, поэтому я разделил его на подклассы и внес изменения, как показано. объективный код 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
    }
}
person Vikram Sinha    schedule 18.07.2018
comment
да. Однако у меня есть подкласс NSScrollView. Ты пробовал? - person dbrownjave; 30.07.2018
comment
да, он работает нормально на моей стороне. установите для автоскрытия значение yes в IB и увеличьте содержимое прокрутки во время выполнения, и он соответственно отобразит скроллер. - person Vikram Sinha; 30.07.2018

Вы можете попробовать переопределить прямоугольник рисования прокрутки

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

Вы всегда можете нарисовать собственный цвет прямоугольника, установив его перед

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

    self.drawKnob()
}
person Aleksey Kornienko    schedule 27.06.2018
comment
Да, это работает! но NSScroller чистый, а не темный, что означает, что его не видно. - person dbrownjave; 27.06.2018
comment
Какую версию MacOS вы используете? - person Aleksey Kornienko; 27.06.2018
comment
версия macOS: 10.13.3 - person dbrownjave; 27.06.2018

Это решение сработало для меня.

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