🗨️

Xamarin.Macでモーダルを最大化させないようにする

2020/12/03に公開

やりたいこと

ModalタイプのSegueで表示したモーダルを最大化できないようにしたい。

やりかた

タイトルバーの最大化ボタンを表示しないようにすればできそうだが、Interface Builder上でViewやModalを選択してインスペクタを見ても、そのような設定項目は見つからない。

タイトルバーはViewControllerではなくWindowに所属しているようだ。
ウィンドウの属性をViewControllerから制御するのは、View.Window.StyleMaskに値をセットすることで実現できるらしい。

StyleMaskに設定できる値は

  • Titled
  • Closable
  • Minitualizable
  • Resizable
  • Utility

などなど。
モーダルのViewControllerのViewWillAppearで以下のように設定する。

        public override void ViewWillAppear()
        {
			View.Window.StyleMask = NSWindowStyle.Titled;

			base.ViewWillAppear();
        }

意図したようなモーダルを表示できた。ユーザでは閉じられないので、適切に閉じられるようにプログラムする必要がある。

今回はタイトルバーありで、閉じる、リサイズ、最小化はいずれもできないようにしたかったのでTitledのみを設定した。

もし、タイトルバーがあり、閉じることができる」ように設定したい場合

View.Window.StyleMask = NSWindowStyle.Titled | NSWindowStyle.Closable

というようにビットの和をセットしてやればいい。

環境

Mac OS Catalina 10.15.6
XCode 12.2
Visual Studio for Mac Community 8.8.1 (build 37)
Xamarin.Mac Modern
Cocoa App(AppKit)

追伸

UtilityとかHudはどういう場合に使うのかわからなかったので、知ってる人がいたら教えてほしいです。

Discussion