2015-10-16 11 views
10

Come visualizzare resize indicators per una NSWindow senza barra del titolo?Indicatore di ridimensionamento NSWindow non visibile


Ho creato un nuovo progetto Xcode (per l'app Mac) con storyboard. Ho appena disabilitato la casella di controllo Title Bar in Aspetto (Nasconde la barra del titolo di NSwindow).

La cosa strana era che, dopo aver disabilitato la barra del titolo, NSWindow non mostrava gli indicatori di ridimensionamento mentre il mouse si trovava sopra i bordi della finestra. Anche se trascino ai bordi, si stava ridimensionando.

Immagino che questo sia un bug, perché se la finestra può essere ridimensionata trascinando il mouse sui bordi, deve mostrare gli indicatori di ridimensionamento.


image

Come si può vedere nell'immagine, gli indicatori di ridimensionamento si vedono dopo utente trascina la finestra, ma molti utenti potrebbe pensare che poiché non v'è alcun indicatore di ridimensionamento, la finestra non è ridimensionabile .

+0

Stai impostando l'area di tracciamento del mouse? Stai aggiornando l'area di tracciamento del mouse dopo il ridimensionamento? – l00phole

risposta

2

Ho risolto questo problema sottoclassi NSWindow e prioritario canBecomeKeyWindow per tornare YES:

#import "MyWindow.h" 

@implementation MyWindow 

- (BOOL)canBecomeKeyWindow { 
    return YES; 
} 

@end 

Non aggiornare ridimensionare i cursori in questo caso sembra un bug di Apple. La documentazione afferma "Il valore della proprietà canBecomeKeyWindow è YES se la finestra ha una barra del titolo o una barra di ridimensionamento, o NO in caso contrario.", Quindi mi aspetto che canBecomeKeyWindow restituirà YES per la finestra ridimensionabile. Ma non è così.

UPD: selezionato il 10.10.5. Si spera che lo stesso comportamento si verifichi il 10.11.

1

Non l'ho verificato, ma è possibile impostare manualmente gli indicatori di ridimensionamento. Penso che aggiungerei quattro NSTrackingAreas alla sottoclasse windows contentView (una per ciascun lato della finestra, solo pochi pixel in altezza/larghezza). Nel metodo mouseEntered(), creare un nuovo oggetto NSCursor per la posizione del mouse appropriata. Ricorda che la posizione potrebbe cambiare, quindi usa pure il metodo mouseMoved(). Su mouseExited() reimposta il cursore.

Ancora una volta, non ho provato questo, ma dovrebbe funzionare.

PS: Non dimenticate di presentare un radar su questo;)