2013-01-18 19 views
9

Come dice il titolo, in realtà desidero rimuovere il bordo da un controllo NSBrowser. I genitori sono NSView e NSControl. Non sono disponibili metodi disponibili in NSBrowser stesso e nemmeno nei controlli padre. Questo sembra completamente privo di documenti.Rimozione del bordo da NSBrowser

Per quanto riguarda il motivo della rimozione del bordo, perché è ancorato in modo programmatico in un'altra vista, quindi la gerarchia della vista indica che c'è già un bordo.

Qualche idea?

+0

Sì, quindi, perché ho detto NSView e NSControl – Kezzer

risposta

2

NSBrowser utilizza NSBrowserCell per implementare la sua interfaccia. Che eredita da NSCell. NSCell dovrebbe fornire i metodi necessari.

Da NSCell riferimento di classe ... Amministratore visualizzare gli attributi - setBezeled: - isBezeled - setBordered: - isBordered - Isopaque - setControlTint: - controlTint - setBackgroundStyle: - backgroundStyle - interiorBackgroundStyle

+0

io non sono sicuro di come ho perso quello. Ci proverò presto, grazie! – Kezzer

+0

Ho provato alcune varianti senza fortuna. L'uso di setBordered sembra non fare nulla. Sembra che nessuno lo abbia mai fatto prima, cosa che trovo strano. – Kezzer

1

Rimuovere il bordo sul NSScrollView in cui è racchiuso.

+0

Questa è la prima cosa che ho esaminato. Non ci sono opzioni disponibili. I documenti espongono le opzioni di enum di confine, ma non esiste alcun metodo per impostare il bordo. – Kezzer

+0

Questo è strano ... IB può sicuramente farlo. Fammi dare un'occhiata, allora. –

+0

Per quanto ne so, 'NSBrowser' ha un'impostazione diversa per la maggior parte dei componenti scrollabili in AppKit. Piuttosto che essere racchiuso in una vista a scorrimento (come ad esempio 'NSTableView' si aspetta, ad esempio), invece fornisce le proprie visualizzazioni di scroll interne. –

1

Basta incorporarlo in una semplice NSView ("Vista personalizzata" in IB) e rendere il frame del browser "outset" di 1 punto in tutte le direzioni dai limiti della vista contenente. La vista contenente bloccherà il browser per eliminare il bordo. Quindi posiziona la vista contenente nella gerarchia della vista circostante, anziché aggiungere direttamente il browser.

+0

Nessuna delle altre risposte ha funzionato per me. Ho implementato questa risposta impostando tutti e quattro i vincoli di layout automatico di NSBrowser su -1 sulla superview (l'enclosure NSView normale). Funziona come un campione. –

0

Per coloro che sono ancora alla ricerca di una soluzione. NSBrowser è la sottoclasse di NSView. È possibile impostare la larghezza del bordo di uno strato NSView a 0:

(Swift)

self.layer?.borderWidth = 0