2

新しいプロジェクトで自動レイアウトを多用していますが、サイズ変更中に NSWindow に関連する問題が 1 つあります ...

  • NSWindowボーダレスウィンドウ、
  • intrinsicContentSize初期セットアップ中、このウィンドウのフレームは、ステータス アイテムの位置と初期コンテンツ ビュー サイズ (のcontentView) に基づいて設定されます。
  • 垂直アンカー属性が に設定されていますNSLayoutAttributeTop
  • 水平アンカー属性が設定されていますNSLayoutAttributeCenterX

... ここまでは順調ですね。NSWindow正しく配置され、サイズも正しく、すべてが見栄えがします。

自動レイアウトなどのために自動的にサイズが変更されるときはいつでもcontentView、最終的なウィンドウの位置が正しい、サイズが正しい、...、これもまた、これまでのところとても良い.

どうしたの?アニメーションが進行中 (ウィンドウが垂直方向にサイズ変更されているとき)、アニメーションが終了するまで、ウィンドウの上部が +- 1 ピクセル下/上/下/上/下/上/下/上/... ジャンプします。かなり醜く見えます...

この擬似コードのように動作します...

NSRect frameRect = window.frame;
while ( frameRect.size.height != desiredHeight ) {
  frame.origin.y -= 1; // Move window down by 1px
  [self setFrame:frame display:YES animate:YES];
  frame.size.height += 1; // Increase window height
  [self setFrame:frame display:YES animated:YES];
}

...自動レイアウトがウィンドウの原点を変更するように見えますが、自動レイアウトは高さも変更する必要があることに気付きます...

誰でもこの動作を見ましたか?

4

1 に答える 1