Я новичок в Swift и Xcode: Я пытаюсь написать приложение для какао и не могу понять, как полностью скрыть содержимое моего NSWindow
. Я использую Swift на Xcode версии 6.3.2; Пользовательский интерфейс, разработанный с использованием раскадровки.Как показать только панель инструментов на NSWindow
Фон: Я разрабатываю приложение, где некоторые элементы управления отображаются пользователю на панели инструментов окна. Одним из этих элементов управления является кнопка раскрытия, используемая для переключения содержимого: нажатие кнопки позволяет пользователю расширить содержимое окна под панелью инструментов, чтобы просмотреть некоторые виды с дополнительными деталями. Нажатие кнопки раскрытия информации снова сворачивает содержимое окна, скрывая просмотры, содержащиеся в окне, и снова отображает только панель инструментов. Когда приложение загружается, должна отображаться только панель инструментов - все содержимое окна должно быть скрыто, поскольку в данный момент они неактуальны.
В моей WindowController.swift
, у меня есть:
class WindowController: NSWindowController, NSToolbarDelegate {
override func windowDidLoad() {
super.windowDidLoad()
window?.hideContents()
}
И я определил расширение NSWindow; в NSWindow.swift
у меня есть:
private let TOOLBAR_WIDTH:CGFloat = 350.0
private let TOOLBAR_HEIGHT:CGFloat = 75.0
private let CONTENT_WIDTH:CGFloat = 800.0
private let CONTENT_HEIGHT:CGFloat = 600.0
public extension NSWindow {
private var screenHeight : CGFloat {
get {
return NSScreen.mainScreen()!.frame.height
}
}
public func hideContents() {
let view = contentView as! NSView
view.hidden = true
view.needsDisplay = true
collapseContentsFrame()
}
private func collapseContentsFrame() {
var newFrame = NSRect(x:frame.origin.x, y:screenHeight, width: TOOLBAR_WIDTH, height: TOOLBAR_HEIGHT)
setFrame(newFrame, display: false, animate: false)
}
public func showContents() {
let view = contentView as! NSView
view.hidden = false
view.needsDisplay = true
expandContentsFrame()
}
private func expandContentsFrame() {
var newFrame = NSRect(x: frame.origin.x, y: screenHeight, width: CONTENT_WIDTH, height: CONTENT_HEIGHT)
setFrame(newFrame, display: true, animate: false)
}
}
Этот вид работ: он скрывает содержимое взглядов, содержащихся в окне, и сжимает кадр почти до того же размера, что и панель инструментов. Тем не менее, под панелью инструментов показывается широкий пустой прямоугольник - похоже, что рамка окна не изменяет размер (не может размещать изображение, поскольку у меня нет разрешения). Я попытался настроить значения в новом фрейме, но я не могу исключить лишнее пространство, отображаемое под панелью инструментов.
В раскадровке содержимое окна связано с TabViewController - не уверен, что это имеет к этому какое-то отношение. Любые предложения/идеи будут с благодарностью оценены.
Итак, вы просто хотите окно размером с NSToolbar? Можете ли вы объяснить, почему вы этого хотите, поскольку панель инструментов предназначена для изменения содержимого в представлении контента. –
Лукас, спасибо за ваш ответ. Согласно вашему предложению, я отредактировал вопрос, чтобы предоставить более подробную информацию. – buzo
Используете ли вы автоматический макет в отображаемом контроллере? Смысл, есть ли что-то, что заблокировало бы контент от рушится? –