Bir mac uygulaması üzerinde çalışıyorum ve artı işareti ile yeşil düğmeye bastığınızda olduğu gibi, başlangıç penceresinin en yüksek duruma getirilmesini seviyorum. Tam ekran olmasını istemiyorum.OSX Uygulaması: Pencere nasıl en üst düzeye getirilir?
cevap
Sen "uzaklaştırma" olabilir hedef çerçeve olarak NSScreen en visibleFrame
kullanarak maksimum kullanılabilir alan bir pencere. Örneğin
if let screen = NSScreen.mainScreen() {
window.setFrame(screen.visibleFrame, display: true, animate: true)
}
, AppDelegate.swift içinde: en window
söyleyin NSWindow IBOutlet olduğunu Let
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
func applicationDidFinishLaunching(aNotification: NSNotification) {
if let screen = NSScreen.mainScreen() {
window.setFrame(screen.visibleFrame, display: true, animate: true)
}
}
yakınlaştırılmış haliyle bir uygulama ile aynı şey değil "maksimize". Yeşil artı simgesi yakınlaştırmayı gösterir, yani "bu içerik için uygun boyut" anlamına gelir. Bazı uygulamalarda görünen çerçeve (Eric D.'nin tartıştığı gibi), ama neredeyse her şey olabilir. Örneğin bir Safari penceresini yakınlaştırmayı deneyin.
Gerçekten, daha sonra Eric doğru yolda "maksimize" değil "zoom" istiyorum varsayarsak, ama daha iyi yapılabilir. Öncelikle, pencerenin ekranını bir tane varsa kullanmalısınız. Ayrıca, başlatma sırasında pencereyi yeniden boyutlandırmamalısınız (lansman sırasında bu durum garip görünebilir).
func applicationDidFinishLaunching(aNotification: NSNotification) {
if let screen = window.screen ?? NSScreen.mainScreen() {
window.setFrame(screen.visibleFrame, display: true)
}
}
Sen uygulama temsilci koyarak yerine bu yönetmek için bir NSWindowController
kullanarak düşünebilirsiniz. Bu durumda, bunu windowDidLoad
'a ekleyebilirsiniz. Pencere denetleyicileri, AppKit'te oldukça yaygın bir araçtır (tarihsel olarak yaygın olmayan denetleyicileri görüntülemek yerine). Aslında, davranış Büyütmek NSWindowDelegate
yöntemle windowWillUseStandardFrame(_:defaultFrame:)
yakından tanımak istiyorsanız
. Genel olarak zoom(_:)
'u doğrudan başlatmaya çağırmamalısınız, çünkü bu animasyon canlandıracak, ancak delegede yaptığınız mantık, çerçevenizi hesaplamak için kullanılmalıdır. Yine, çerçevenizi ana ekran yerine bir tane varsa pencerenin ekranında yaşamak için ayarladığınızdan emin olun.
İdeali, gerçekten kullanıcı görünür çerçeveye onu zorlamak yerine kullanılan son kareyi onurlandıran edilmelidir. Daha fazla araştırmak istiyorsanız, buna Cocoa'da frameAutosave
denir. Bir pencere denetleyicisi, Arayüz Oluşturucu'da bir otomatik kaydetme adı ayarladıysanız bunu otomatik olarak yönetmenize yardımcı olacaktır. (Görünür çerçeveyi elde etmek için ilk başlatımda kareyi hesaplamaya gereksinim duymak biraz karmaşık olsa da, tamamen otomatik olmayacaktır.)
Varsayılan çerçevenizi görünür çerçeve haline getirmeden önce dikkatli bir şekilde düşünün. vaka. Bu, büyük monitörlerde gerçekten çok büyük olabilir (orada hala 30 tane "Sinema gösterileri var, ama 27'de bile" oldukça bunaltıcı olabilir). Bazen uygulamanıza bağlı olarak iyi olur, ancak sık sık başlangıç boyutunun belirlenmesini (kullanıcının daha büyük yapmasına izin verirken) belirlemeyi tercih ederim.
Merhaba Guys Yardımın için minnettarım.
Belge tabanlı bir mac uygulaması üzerinde çalışıyorum. Belge sınıfının makeWindowControllers() 'ında sağladığınız kodu koydum ve bir çekicilik gibi çalışıyor.
Çok teşekkür ederim. İşte kullandığım kod.
override func makeWindowControllers() {
// Returns the Storyboard that contains your Document window.
let storyboard = NSStoryboard(name: "Main", bundle: nil)
let windowController = storyboard.instantiateControllerWithIdentifier("Document Window Controller") as! NSWindowController
self.addWindowController(windowController)
if let screen = NSScreen.mainScreen() {
windowController.window?.setFrame(screen.visibleFrame, display: true, animate: true)
}
}
- 1. JFrame JAVA'da nasıl en üst düzeye getirilir?
- 2. FormBorderStyle.FixedToolWindow penceresini en üst düzeye çıkarmak için pencere başlık çubuğunun çift tıklamasını nasıl durdurabilirim?
- 3. Birden çok monitörde bir pencereyi nasıl en üst düzeye çıkarabilirim?
- 4. WatiN kullanarak tarayıcı penceresi nasıl en üst düzeye çıkarılır?
- 5. En üst düzeye ulaştığında CollapsingToolbarLayout öğesinde stop kaydırma nasıl engellenir?
- 6. Mac Chrome atlama etkinlikleri, pencere en üst düzeye getirildiğinde farklı davranıyor
- 7. Bir özellik değiştiğinde DataGridView denetimi en üst düzeye kaydırır
- 8. Eclipse Juno kırmızı, Linux üzerindeki düğmeleri en aza indirir ve en üst düzeye çıkarır.
- 9. Eclipse'de pencereler nasıl varsayılan duruma getirilir?
- 10. Emacs'te geçerli etkin pencereyi en üst düzeye çıkarabilir ve sonra birden çok pencere ortamında geri yükleyebilir miyiz?
- 11. Bir sekmeyi çift tıklattığınızda Eclipse'in düzenleyiciyi en üst düzeye çıkarma davranışı nasıl devre dışı bırakılır?
- 12. Pyqt: Bir sütun görünümünde sütun genişliğini nasıl en üst düzeye çıkarmak?
- 13. Pencere Numarasını OSX Erişilebilirlik API'sı Yoluyla Kullanma
- 14. Solr dizini nasıl en iyi duruma getirilir
- 15. Tüm üst düzey pencere javafx nasıl alınır?
- 16. BABEL Not: Kod jeneratörü "app.js" stilini en üst düzeye çıkardı. Meteor
- 17. OSX Statusbar Uygulaması kullanarak Swift
- 18. Visual Studio'daki geçerli sekmeyi en üst düzeye çıkarmak için bir yol var mı?
- 19. Scene2d.ui penceresinin en üst rengi?
- 20. Bir pencereyi (osx) her zaman ekranın üst kısmına getirmeyi umuyorum
- 21. En az bir kalıcı pencere açıldığında winforms uygulaması nasıl en aza indirilir
- 22. Sabit üst koordinatlı yeniden boyutlandırılabilir pencere oluştur
- 23. JComponent'in en üst düzey konteyneri nasıl alınır?
- 24. Bir öğenin en üst konumu nasıl alınır?
- 25. En son alt düğüm C# kullanarak XML dosyasında nasıl getirilir?
- 26. Elektron kontrolleri olan çerçevesiz pencere (Windows)
- 27. Android'de Düğmenin Önündeki Rozet Sayımı nasıl getirilir?
- 28. Bir pencere yapıcıyı tam ekran yapın
- 29. C++ Modeli'ni QML'ye nasıl getirilir
- 30. OSX klavye kısayolu arka plan uygulaması, nasıl yapılır
Üzgünüm, mac dünyasında çok yeniyim. Ben sadece bu kodu NSViewController: viewDidLoad 'a koydum ve çalışmıyor, bu kodu tam olarak nereye koyacağımı söyleyebilirsiniz.Bu benim kodum = ekran görüntüsü = NSScreen.mainScreen() { self.view.window? .setFrame (screen.visibleFrame, görüntü: true, animate: true) } –
Yanıtımı bir örnekle güncelleştirdim. – Moritz
Hızlı Güncelleme 3: '.mainScreen()' i '.main()' ile değiştirin. – Moritz