Ответ 1
[yourWindow setStyleMask:NSBorderlessWindowMask];
Есть ли способ скрыть заголовок в NSWindow? Я не хочу полностью писать новое пользовательское окно. Я не могу использовать NSBorderlessWindowMask, потому что у меня есть нижняя панель в моем окне, и использование NSBorderlessWindowMask заставляет это исчезнуть. Я также попытался использовать setContentBorderThickness: forEdge: с NSMaxYEdge и установив его в 0, это тоже не сработало.
Любая помощь приветствуется
[yourWindow setStyleMask:NSBorderlessWindowMask];
Начиная с OS X 10.11, вы можете скрыть строку заголовка.
window1.titlebarAppearsTransparent = true
window1.titleVisibility = .Hidden
Возможно, вы хотите переопределить стиль окна.
window1.styleMask = NSResizableWindowMask
| NSTitledWindowMask
| NSFullSizeContentViewWindowMask
Что произойдет, если вы получите представление о кнопке закрытия? Вы можете скрыть это?
// Imagine that 'self' is the NSWindow derived class
NSButton *miniaturizeButton = [self standardWindowButton:NSWindowMiniaturizeButton];
NSView* titleBarView = [miniaturizeButton superview];
[titleBarView setHidden:YES];
Единственный способ, которым я знаю, - создать окно без заголовка (см. NSBorderlessWindowMask). Обратите внимание: вы не можете (легко) создать окно без titlebar в IB, поэтому вам придется немного поработать над кодом (есть пара различных подходов, вы, вероятно, можете понять это).
Большой недостаток с использованием окна без заголовка - это то, что вы сейчас находитесь на крючок для большей части стандартного внешнего вида и поведения - закругленные углы и т.д.
У меня возникло ощущение, что когда я впервые установил представление содержимого своего окна, а затем установил окно без полей:
[yourWindow setStyleMask:NSBorderlessWindowMask];
Ничего не появится в моем окне. Поэтому я сначала установил маску стиля, и после этого я установил представление содержимого:
- (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 content view
[self.window.contentView addSubview:self.masterViewController.view];
self.masterViewController.view.frame = ((NSView*)self.window.contentView).bounds;
}
И вуаля, содержимое моего окна появилось.
Вы можете использовать WAYInAppStoreWindow, доступный в GitHub, который работает на Yosemite и Mavericks.
Вид экрана приветствия Настройка NSWindow/NSViewController (Swift 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)
}
}
}
Результат