gpt4 book ai didi

macos - 像 Preview.app 一样将 NSScrollView 的文档 View 居中?

转载 作者:行者123 更新时间:2023-12-03 16:54:34 24 4
gpt4 key购买 nike

我问的问题几乎与 Trouble with autolayout on NSScrollView's document view 完全相同。这个问题的解决办法是在-awakeFromNib:中将translatesAutoresizingMaskIntoConstraints设置为NO

但是,对我来说(我使用的是 Xcode 5),加载 Nib 时此标志已设置为 NO,因此我似乎遇到了不同的问题。

我想复制 Preview.app 详细信息与图像缩放的方式,仅使用布局约束(如果可能)。当图像大小小于内容 View 边界时,将显示完整图像。但是,当图像缩放时,滚动条会激活以允许导航。这看起来很简单。下面是我构建的 View 层次结构。请注意, ImageView 包含在自定义 NSView 中(这是因为我一直遵循前面的问题方法,其中自定义 View 绘制背景),此容器 View 是 NSScrollView 的 documentView 而不是使用 IB 的 Embed In 命令嵌入 ScrollView 内的 View 。

Zooming an image in a scroll view.

我在 IB 中设置了以下约束:

  • ImageView 的 intrinsicContentSize 设置为图像的大小。在 IB 中,使用占位符大小来满足约束条件。
  • 包含图像的 View 被限制为与 ImageView 具有相同的宽度和高度(例如,为了绘制背景/边框,可以将其设置为稍大的尺寸)。
  • 图像容器 View 被限制在其 super View 的中心(即 NSScollView 的剪辑 View )
  • ScrollView 被限制为填充窗口的 contentView。

这些约束并不含糊,但我不明白为什么图像不居中?

Image not centered!

最佳答案

老问题,但这是一个不需要子类化的现代解决方案。这里涉及到四个 View :

  • ScrollView 就是 NSScrollView 本身。
  • 剪辑 View 是包含在 ScrollView 中的 NSClipView。
  • 内容 View 是剪辑 View 内的 NSView。
  • ImageView 是一个用于显示内容的 NSImageView。

流程如下:

  1. 创建 ScrollView 并将 ImageView 放置在其内容 View 中。
  2. 将 ImageView 的所有四个边限制为与内容 View 的边相等。
  3. 将内容 View 的前缘和顶缘约束到剪辑 View 。
  4. 将内容 View 的宽度和高度设置为大于或等于剪辑 View 的宽度和高度。
  5. 将 ImageView 的“缩放”设置为“无”,并将对齐方式设置为居中。

请注意,您可以将 NSImageView 替换为或多或少支持内容对齐和内在内容大小的任何内容。或者,使用 NSView,将一些其他内容置于其中居中,并将该内容的顶部和左侧边缘固定到父级。这将允许 NSView 推断其最小尺寸,同时保持其 subview 居中。

关于macos - 像 Preview.app 一样将 NSScrollView 的文档 View 居中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20762519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com