2

我确实在我的新项目中大量使用了自动布局,但是在调整大小时我遇到了一个与 NSWindow 相关的问题......

  • NSWindow是无边框窗口,
  • 在初始设置期间,此窗口的框架是根据状态项位置和初始内容视图大小(intrinsicContentSizecontentView)设置的,
  • 垂直锚属性设置为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

1

Mea culpa,我怎么能错过它,这是因为我确实使用NSLayoutConstraintheight我的一个观点,我正在通过它制作动画animator,它会产生非整数值 - 所以height有时确实包含实数,这就是跳到顶部的原因NSWindow. 问题解决了。

于 2013-04-15T13:36:02.200 回答