質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cocoa

CocoaはMac OS X用のアプリケーションを構築する為の主要なフレームワークのひとつです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1380閲覧

TitlebarAccessoryViewControllerの下に余白ができます。

HihuSnow

総合スコア23

Cocoa

CocoaはMac OS X用のアプリケーションを構築する為の主要なフレームワークのひとつです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/06/14 04:34

編集2020/06/14 04:50

以下の図のようにTitlebarAccessoryViewControllerの下に余白ができます。

イメージ説明

TitleBarControllerの実装は以下です。

swift

1class ASToolbarController: NSTitlebarAccessoryViewController { 2 override func loadView() { 3 self.view = NSView(frame: .init(size: [10, 50])) // [10, 50]サイズのView 4 self.view.wantsLayer = true 5 self.view.layer?.backgroundColor = NSColor.red.cgColor 6 } 7}

これをWindowDidLoadで設定しています。

(親クラスのAxDocumentWindowControllerはUIには一切触っていません。)

swift

1class ASWindowController: AxDocumentWindowController { 2 private let toolbarController = ASToolbarController() 3 4 override func windowDidLoad() { 5 super.windowDidLoad() 6 self.window?.addTitlebarAccessoryViewController(toolbarController) 7 } 8}

そもそもTitlebarAccessoryView自体が新しいAPIなので、Appleのバグの可能性もありそうですが、もし解決方法などご存知でしたらお願いします。


とりあえず試したことを書いていきます。

実は裏でsizeが変更されていないかのチェック。

Sizeは変更されておらず、設定したTitlebarAccessoryViewの親Viewである、NSTitleBarViewの時点でずれている。
イメージ説明


他のsizeを設定するとどうか?
TitlebarAccessoryViewの高さ10で実験。

先ほどより小さい余白が確認できた。
やはりAppKitのバグか...?

イメージ説明


他のTitlebarAccessoryViewが挿入されていないか

以下のコードで確認

swift

1Timer.scheduledTimer(withTimeInterval: 1, repeats: false) {_ in 2 print(self.window?.titlebarAccessoryViewControllers) 3}

明らかに存在していない。

Optional([<AxStudio.ASToolbarController: 0x60000390f0c0> - NSLayoutAttributeBottom])

また、他のTitlebarAccessoryViewの使用例をみるとほとんどがToolBarとの並列仕様である。

もしかしてToolBarなし+TitlebarAccessoryViewが想定されていない...?

Documentを読んでみる。


DocumentにToolBarとの関係について特段の記載はなかった。
また、フルスクリーンにして戻すと余白がなくなるという挙動を確認した。

以上を持ってこれはAppKitのバグと判断し、TitlebarAccessoryViewの使用をやめることにする。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

解決できたので記載しておきます。viewDidAppear内でheightを記述することで余白を削除することができました。

具体的には以下のようになります。

swift

1class ACWindowBadgeViewController: NSTitlebarAccessoryViewController { 2 override func loadView() { 3 self.view = ACWindowBadgeView() 4 } 5 override func viewDidLoad() { 6 self.layoutAttribute = .bottom 7 } 8 override func viewDidAppear() { 9 self.view.frame.size.height = 30 10 } 11}

投稿2020/06/14 04:51

編集2020/09/13 05:16
HihuSnow

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問