1

我有一个窗口,当用户点击它时我需要改变它的大小。我[self setFrame:windowFrame display:YES animate:YES]用来完成这个。

即使窗口成功地改变了大小(我增加了它的高度),它也会随着它向上移动窗口的内容。我该如何防止这种情况发生?我希望内容保持不变。

我在 OSX Mountain Lion 上使用 Objective-C 和 Cocoa 为 OSX 开发应用程序。

编辑:约束和/或弹簧和支柱将不起作用,因为我需要在调整窗口大小后移动内容。

4

4 回答 4

2

如果您使用Interface Builder 来构建这些视图,那么我相信一种方法是设置“支柱和弹簧”。这些在“尺寸检查器”下可用,并且是“自动调整大小”标签上方的红色箭头和条形图。玩弄这些以获得您想要的效果,但总体思路是箭头控制视图大小如何调整以适应父视图大小的变化,而条形图控制视图边缘的关系随着大小的变化,到父视图的边缘。

于 2012-09-07T03:02:44.673 回答
2

约束和/或弹簧和支柱将不起作用,因为我需要在调整窗口大小后移动内容。

在这种情况下,您应该使用NSViewAnimation

单个视图动画实际上可以对多个视图执行多个动画,您甚至可以对一个窗口执行一个动画,尽管类的名称和窗口不是 Cocoa 中的视图这一事实。

您使用 来创建一个视图动画initWithViewAnimations:,它需要一个字典数组。每个字典都标识了目标 ( NSViewAnimationTargetKey) 以及对它执行的操作:更改目标的框架 ( NSViewAnimationStartFrameKeyand NSViewAnimationEndFrameKey) 或淡入或淡出目标 ( NSViewAnimationEffectKey)。对于您的情况,您将更改目标的框架。

当用户执行导致调整窗口大小的操作时,您需要计算所需的窗口整体大小(注意调整其框架的位置,使其不会超出屏幕),以及您的视图的新框架(包括位置和大小)。所有将移动和/或改变大小的东西,为其创建一个字典并将其放入数组中。然后创建视图动画。

NSViewAnimation 是一种NSAnimation,它提供了所有的方法来启动和停止动画,监控它的进度,连接到它,以及将多个 NSAnimation 链接在一起。如果不出意外,您将需要启动动画

于 2012-09-09T15:28:41.993 回答
0

在基于约束的布局中,将窗口边缘周围的视图设置为其父视图边缘的固定距离。

Xcode 会从中推断出很多可调整性;如果仍然无法正确调整大小,请调整其约束,使其宽度和/或高度不再恒定。

最简单的方法是移动视图,直到蓝线出现在编辑器中。每条蓝线对应于 HIG 中关于事物应该如何布置的规则,如果您将视图放在那里,Xcode 将创建与这些准则匹配的约束。例如,如果您将视图设置为距其父视图的右边缘 20 点,您将得到一条蓝线,如果您将视图放在那里,您将创建一个约束,即视图必须保持该距离那个边缘。

超级视图不是您可以创建基于 HIG 的约束的唯一视图。您还可以在同级视图之间创建准则约束。例如,如果您将一个按钮放在另一个按钮旁边的适当距离处,您将在该距离上看到一条蓝线,如果您放下它,您将创建一个约束,即这两个按钮必须与每个按钮保持该距离其他。

如果你想做一些真正自定义的事情,nib 编辑器右下角的三个按钮可以让你创建任何你想要的约束。您选择的内容决定了您可以创建哪些约束;笔尖编辑器的大纲视图将帮助您确保您拥有所需的选择。

于 2012-09-07T17:42:10.410 回答
0

您将不得不遍历所有子视图并根据窗口框架的增量更改它们的框架位置。

因此,如果您将窗口框架向各个方向扩展 20,则所有子视图都必须将其框架位置增加 (20,20) 以抵消窗口移动。

于 2012-09-14T00:12:40.117 回答