2010-01-07 13 views
14

क्या एनएसविंडो में टाइटलबार छुपाने का कोई तरीका है? मैं पूरी तरह से एक नई कस्टम विंडो लिखना नहीं चाहता। मैं NSBorderlessWindowMask का उपयोग नहीं कर सकता क्योंकि मेरे पास मेरी खिड़की पर एक निचला पट्टी है, और NSBorderlessWindowMask का उपयोग करके गायब हो जाता है। मैंने setContentBorderTickness का उपयोग करने का भी प्रयास किया: forEdge: NSMaxYEdge के साथ और इसे 0 पर सेट करना, जो या तो काम नहीं करता था।एनएसविंडो शीर्षक बार छुपाएं

किसी भी मदद

+0

मैं बहुत ज्यादा सिर्फ मेरे ऐप्लिकेशन के डिजाइन इतना बदल रहा समाप्त हो गया यह आवश्यक नहीं है, उन सभी के लिए जो ऐसा करने के बारे में सोच रहे हैं, यह जाने का एक अच्छा तरीका नहीं है। – indragie

उत्तर

1

यदि आप बंद करें बटन के superview मिलता तो क्या होता है की सराहना की है? क्या आप इसे छुपा सकते हैं?

// Imagine that 'self' is the NSWindow derived class 
NSButton *miniaturizeButton = [self standardWindowButton:NSWindowMiniaturizeButton]; 
NSView* titleBarView = [miniaturizeButton superview]; 
[titleBarView setHidden:YES]; 
+1

मैंने कोशिश की और यह खिड़की को सफेद और खाली कर देता है। अगर मुझे गलत नहीं लगता है, तो बटन का पर्यवेक्षण NSThemeFrame है। हालांकि, मैं यह देखने के लिए दृश्य के फ्रेम को समायोजित करने का प्रयास कर सकता हूं कि मैं इसे छोटा कर सकता हूं या नहीं। – indragie

+0

फ्रेम समायोजित करने से अच्छी तरह से काम नहीं होता है, मुझे सभी प्रकार के अजीब परिणाम मिलते हैं। मुझे लगता है कि बहुत ज्यादा अटक गया। – indragie

+0

कारण यह नहीं था कि NSThemeFrame विंडो की सामग्री दृश्य का पर्यवेक्षण है। फ्रेम दृश्य छुपाएं, और इसके सभी सबव्यूज़ भी छुपाए जाएं। – NSResponder

32
[yourWindow setStyleMask:NSBorderlessWindowMask]; 
+4

मेरा मानना ​​है कि आपको भी CanBecomeKeyWindow या उस तरह कुछ ओवरराइड करना होगा। मैंने यह कोशिश की और जो भी हुआ वह यह है कि मेरी खिड़की नहीं दिखाई देगी। हालांकि, मैंने ऐप्पल नमूना कोड का उपयोग किया जो बीजान से जुड़ा हुआ था और यह खूबसूरती से काम करता था। –

+0

indragie ने स्पष्ट रूप से संकेत दिया कि वह NSBorderlessWindowMask का उपयोग नहीं कर सका। – ctpenrose

+0

@ केनी वाईलैंड क्या लिंक है? – skywinder

1

एक ही रास्ता मैं एक शीर्षक पट्टी के बिना एक खिड़की बनाने के लिए किया जाएगा पता है (देखें NSBorderlessWindowMask)। ध्यान दें कि आप आईबी में टाइटलबार के बिना विंडो (आसानी से) नहीं बना सकते हैं, इसलिए आपको कोड में थोड़ा सा काम करना होगा ( अलग-अलग दृष्टिकोण हैं, आप शायद इसे समझ सकते हैं)।

टाइटलबार के बिना खिड़की का उपयोग करने के साथ एक बड़ी कमी यह है कि अब आप पर मानक उपस्थिति और व्यवहार - गोलाकार कोनों और अधिक के लिए हुक पर हैं।

[yourWindow setStyleMask:NSBorderlessWindowMask]; 

कुछ भी नहीं है मेरी खिड़की में दिखाई देगा:

1

मैं एक अनुभव है कि जब मैं पहली बार मेरी विंडो की सामग्री को देखने के सेट और फिर खिड़की सीमारहित सेट था। तो मैं पहले शैली मुखौटा सेट और उसके बाद मैं सामग्री दृश्य निर्धारित किया है:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    // 1. borderless window 
    [[self window] setStyleMask: NSBorderlessWindowMask]; 
    // 2. create the master View Controller 
    self.masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil]; 
    // 3. Add the view controller to the Window's content view 
    [self.window.contentView addSubview:self.masterViewController.view]; 
    self.masterViewController.view.frame = ((NSView*)self.window.contentView).bounds;  
} 

और देखा, मेरे विंडो की सामग्री दिखाई दिया है।

0

आप गीताहब पर उपलब्ध WAYInAppStoreWindow का उपयोग कर सकते हैं जो योसामेट और मैवरिक्स पर काम करता है।

9

ओएस एक्स 10.11 से शुरू, आप शीर्षक पट्टी छुपा सकते हैं।

 window1.titlebarAppearsTransparent = true 
     window1.titleVisibility    = .Hidden 

शायद आप विंडो शैली को ओवरराइड करना चाहते हैं।

 window1.styleMask     = NSResizableWindowMask 
              | NSTitledWindowMask 
              | NSFullSizeContentViewWindowMask 
0

स्वागत स्क्रीन NSWindow/NSViewController सेटअप (स्विफ्ट 4,1)

extension NSWindow { 

    enum Style { 
     case welcome 
    } 

    convenience init(contentRect: CGRect, style: Style) { 
     switch style { 
     case .welcome: 
     let styleMask: NSWindow.StyleMask = [.closable, .titled, .fullSizeContentView] 
     self.init(contentRect: contentRect, styleMask: styleMask, backing: .buffered, defer: true) 
     titlebarAppearsTransparent = true 
     titleVisibility = .hidden 
     standardWindowButton(.zoomButton)?.isHidden = true 
     standardWindowButton(.miniaturizeButton)?.isHidden = true 
     } 
    } 
} 

class WelcomeWindowController: NSWindowController { 

    private (set) lazy var viewController = WelcomeViewController() 
    private let contentWindow: NSWindow 

    init() { 
     contentWindow = NSWindow(contentRect: CGRect(x: 400, y: 200, width: 800, height: 472), style: .welcome) 
     super.init(window: contentWindow) 

     let frameSize = contentWindow.contentRect(forFrameRect: contentWindow.frame).size 
     viewController.view.setFrameSize(frameSize) 
     contentWindow.contentViewController = viewController 
    } 
} 

class WelcomeViewController: NSViewController { 

    private lazy var contentView = View() 

    override func loadView() { 
     view = contentView 
    } 

    init() { 
     super.init(nibName: nil, bundle: nil) 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     contentView.backgroundColor = .white 
    } 
} 

class View: NSView { 

    var backgroundColor: NSColor? 

    convenience init() { 
     self.init(frame: NSRect()) 
    } 

    override func draw(_ dirtyRect: NSRect) { 
     if let backgroundColor = backgroundColor { 
     backgroundColor.setFill() 
     dirtyRect.fill() 
     } else { 
     super.draw(dirtyRect) 
     } 
    } 
} 

परिणाम का प्रकार

Welcome screen style NSWindow

संबंधित मुद्दे