gpt4 book ai didi

cocoa - NSImageView:水平适合容器宽度,垂直纵横比

转载 作者:行者123 更新时间:2023-12-03 17:10:00 28 4
gpt4 key购买 nike

我希望将 NSImageView 嵌入到 NSScrollView 中,以便在调整 NSScrollView 大小时,其文档 View (即 NSImageView)水平(向上或向下)调整大小以匹配 NSScrollView 的宽度,同时缩放其内容以保留图像的纵横比。因此,NSImageView 可能会也可能不会被 NSScrollView 剪切,并且垂直滚动可能是可能的。

这可能会让事情变得更清楚:如果我想要的东西在我的程序中的“查看”菜单下有一个菜单选项,那么它的标题将是“缩放以水平适应”。

这是我所做的:

  1. 在布局编辑器中创建 NSImageView。
  2. 使用“嵌入...”将其嵌入到 NSScrollView 中。
  3. 在 NSImageView 的属性编辑器中为“缩放”选项启用“按比例向上或向下”。
  4. 添加约束以将 NSScrollView 的边距固定到其容器。
  5. 添加约束以将 NSImageView 的左侧和右侧固定到其容器。
  6. 将 NSImageView 的水平内容压缩阻力优先级降低到 251。

NSScrollView 按预期调整大小。 NSImageView 的左和右(或自动布局约束用语中的“前导”和“尾随”)边距被限制为与 NSScrollView 匹配。 NSImageView 中的图像将按比例缩小,以适合 NSScrollView。当 NSScrollView 高度不足以显示整个图像时,可以进行垂直滚动。

有两个问题。

首先,NSImageView 将根据需要增加其垂直尺寸以保持纵横比,但是当 NSScrollView 缩小时(即,因为包含的窗口变小),NSImageView 永远不会减小其垂直尺寸。因此,图像上方和下方可能会有一堆空白区域。

我对这里发生的情况的悲惨猜测是这样的:当窗口增大时,布局引擎告诉 NSImageView 它会在水平方向上变大,并且 NSImageView 认为它必须调整其内容的大小(就像它一直在做的那样)指示执行步骤 3) 并表示它希望在垂直方向上更大。当窗口变小时,NSImageView 得知它会水平缩小,但它没有包含空白空间的问题,因此它不要求垂直变小。

我尝试过使用垂直内容压缩和拥抱优先级,以及在 NSImageView 上设置 =1(和 >=1)的低优先级高度约束,希望这会温和地鼓励它尽可能小因为它可以在不与其他约束相矛盾的情况下实现,但是这告诉我,我对自动布局的理解很差。

当 NSImageView 得知其水平尺寸正在更改时,我是否需要以编程方式重置其垂直尺寸?

第二个问题是图像在水平方向上的增长不会超出其自然大小。由于 NSImageView 的前缘/后缘受到限制以匹配其容器,并且由于它被告知要向上或向下缩放其内容,所以我什至无法开始猜测为什么会发生这种情况。

最佳答案

当 ImageView 中的图像更新时,以编程方式应用这些约束似乎可以解决问题:

float aspect = image.size.height / image.size.width;
[imageView.heightAnchor constraintEqualToAnchor:imageView.widthAnchor
multiplier:aspect].active = YES;
[scrollView.superview.heightAnchor constraintLessThanOrEqualToAnchor:imageView.heightAnchor].active = YES;

这是对界面构建器中创建的以下约束的补充:

  1. 图像View.top = Superview.top
  2. ImageView .leading = Superview.leading
  3. 图像View.trailing = Superview.trailing
  4. Superview.bottom = 滚动View.bottom - 1
  5. Superview.top = 滚动View.top - 1
  6. Superview.leading = 滚动View.leading - 1
  7. Superview.trailing = 滚动View.trailing - 1

关于cocoa - NSImageView:水平适合容器宽度,垂直纵横比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37264958/

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