【问题标题】:Trouble with autolayout on NSScrollView's document viewScrollView 文档视图中的自动布局问题
【发布时间】:2012-08-30 07:08:41
【问题描述】:

我正在尝试找到使用 Lion 的自动布局来制作这个简单的窗口的最佳方法,该窗口包含一个可滚动的视图,该视图具有居中的图像和周围的边框。看看我很棒的 ascii 艺术作品:

+==============+
|             ||
|    XXXXXX   ||
|    XXXXXX   ||
|    XXXXXX   ||
|              |
+--------------+

NSScrollView 的文档视图是一个翻转的 NSView 子类,它绘制背景图案,在其中我添加了一个用户选择的图像(即不确定大小)。添加图像视图时,我给它约束以使其在文档视图中居中。文档视图本身受到约束,表示它希望比加载的图像略大。我想要的是明显的行为:在加载大于 scollview 的图像时,滚动条变为活动状态,在调整窗口大小时滚动条正常激活/停用。

但是,在加载大图像时,我看到文档视图正常展开,但滚动视图和窗口随之展开!在那之后,窗口不允许将大小调整得更小。显然我做得不对,但我不明白为什么。

我尝试更改文档视图约束的优先级,任何高于 NSLayoutPriorityWindowSizeStayPut 的内容和窗口都会像上面一样展开(我猜是有道理的),但任何更低的内容和文档视图永远不会调整大小,调整窗口的大小更小但滚动条未启用。

有谁知道我是否需要在其他地方设置其他优先级,或者我需要额外的约束,或者完全不同的方法......我应该设置文档视图的“固有大小”吗?指向我还没有看到的任何自动布局开源/示例代码的指针也会很酷。

【问题讨论】:

  • 我正在尝试弄清楚如何使用自动布局来制作您在帖子中提到的令人惊叹的 ascii 艺术视图层次结构。我从 NSImageView 开始,然后选择 Embed in Scroll View 选项。但是之后似乎没有任何效果,滚动视图中 NSImageView 的居中约束被忽略了。有没有机会我可以看看一个准系统项目,它如何在约束条件下做到这一点?
  • 上次我没有给你点名,所以你可能没有注意到。更新到 Xcode 5 似乎已经解决了大部分问题,但是,我仍然无法让图像视图在滚动视图中居中。
  • 很抱歉没有看到您之前的评论。可悲的是,我不再有那个项目了。就像我在下面的回答所说,笔尖只有一个NSScrollView,包含NSImageView 的视图层次结构是在运行时创建的,因此translates.. 属性可以设置为NO。我不记得有什么限制,但我认为它们并不棘手。可能是NSView 超级视图到NSImageView 的宽度/高度约束设置为>= 与图像大小的关系(在运行时约束时已知),然后是用于将NSImageView 置于其超级视图中心的那些。跨度>
  • 好的,感谢 cmets。我会再试一次!

标签: objective-c cocoa appkit autolayout


【解决方案1】:

这原来是旧的translatesAutoresizingMaskIntoConstraints 陷阱。当我遇到这些问题时,我正在 Interface Builder 中设置 NSScrollView 的文档视图。

我改为在运行时创建视图(或者我可以在 IB 中将其单独定义为“松散”视图),然后在我的窗口控制器中连接它:

self.backgroundPatternView.translatesAutoresizingMaskIntoConstraints = NO;
self.scrollView.documentView = self.backgroundPatternView;

在此更改之后,默认优先级工作正常。

【讨论】:

  • 当我将文档视图设置为 translatesAutoresizingMaskIntoConstraints = NO 时,它消失了,你知道为什么吗?
  • 这对我来说不是很清楚。如果没有其他人自愿在这里提供简单的答案,我建议您创建自己的问题,其中包含代码和/或更多详细信息。
猜你喜欢
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2020-09-21
  • 1970-01-01
  • 2013-06-09
相关资源
最近更新 更多