2

作为一个有点熟练的 iOS 开发人员,我刚刚开始在 Cocoa 中开发一个桌面 OSX 项目,我遇到了一些我无法理解的问题。所以这个问题是针对 OSX 开发人员的。

我不太喜欢 Interface Builder,所以我倾向于用代码编写我的视图。我编写视图布局代码的最突出的方法是视图控制器的loadView方法,至少在 iOS 上,我对所有内容都使用autoresizingMasks。尝试小视图、大视图、旋转横向和纵向视图,如果一切都很好,我将继续列表中的下一个项目。现在在桌面上,autoresizingMask作品(或只是看起来)有点不同。首先,属性有不同的名称,但它们的行为似乎也很奇怪或出乎意料。

当我遇到下面的问题时,我认为这一定是我的代码错了,所以在尝试了足够长的时间后,为了确认,我用 Interface Builder 重新创建了它,你猜怎么着:我得到了完全相同的结果。使用四个垂直堆叠的子视图进行视图。将中间的两个设置为具有灵活的高度,外部的要固定。当您运行它时,将其缩小并再次备份,我在调整大小之前和之后得到两个完全不同的布局。见图片:

在此处输入图像描述

现在我可以从运行循环之间的数学角度理解为什么会发生这种情况,但是从“自动调整大小”或“自动调整大小”功能的角度来看,这绝对没有意义。

在我尝试在这里写出所有调整大小的主题之前,我可以问你这些问题吗?如果您觉得它添加到帖子中,请随意详细说明调整大小的主题。

  1. 难道我不想在桌面项目上使用 Interface Builder 是个傻瓜吗?
  2. autoresizingMask我应该比iOS项目依赖更少吗?
  3. 在没有 Interface Builder 的情况下,确保您的布局符合标准有哪些不错的替代方案?

干杯!

4

2 回答 2

1
  1. 是的,在我看来。:)

  2. 当它做你需要的事情时,你应该依赖它。当它不够时,覆盖resizeSubviewsWithOldSize:和/或resizeWithOldSuperviewSize:(或见下文)。

  3. ???

如果您可以以 10.7 为目标,请查看新的基于约束的布局系统。查看WWDC 2011的Cocoa Autolayout视频。

你也可以设置足够大的东西来防止奇点minSizeNSWindow

于 2012-01-22T21:33:46.530 回答
1
  1. 我不确定我会说“傻瓜”,但拒绝在 Mac 上使用 Interface Builder 是一个非常……前卫的选择。

  2. 您绝对应该对视图使用自动调整大小。

  3. 疯狂地专注并花大量时间确保一切都是正确的。(这就是为什么我不建议不使用 Interface Builder 的原因。一般来说,你得到的是很多浪费的时间,你可以花在做其他事情上。)

在这种情况下,我认为最好的方法是为窗口设置一个合理的最小高度。不要让它太小而无法显示它需要显示的内容。

于 2012-01-22T21:34:11.930 回答