【问题标题】:Autolayout NSImageView in NSView - scale size. Programmatically set NSLayoutConstraintNSView 中的自动布局 NSImageView - 缩放大小。以编程方式设置 NSLayoutConstraint
【发布时间】:2013-04-02 21:14:08
【问题描述】:

我在 IB 中设置的 NSView 中有一个 NSImageView。 NSImageView 的大小与 NSView 完全相同。

一切正常,调整窗口大小时 NSImageView 的大小与 NSView 相同。

但是,现在我已经向 NSImageView 添加了一个动画(从 A 移动到 B),这会弄乱在 IB 中设置的约束。所以我必须以编程方式执行此操作。

如何以编程方式设置 NSLayoutConstraint 以使我的 NSImageView 与我的 NSImageView(超级视图)具有相同的大小?

更新:

只是为了给你们一些更多的信息。我的应用程序使用拆分视图(三个视图),而不是在 IB 中添加 NSImageView,我现在以编程方式添加它。我将我的新视图(应可扩展到它的父视图)添加到拆分视图中的第三个视图。

您认为拆分视图会导致这些问题吗?

更新 2:

好的,我更接近解决这个问题了。我从视图中删除了 NSImageView,并添加了一个 NSView。 NSView 可以正常缩放,但是一旦我添加了 NSImageView,它就会停止工作,因为 NSImageView 在调整窗口大小后不会缩放。

换句话说,问题出在 NSImageView 本身。调整窗口大小后它不会缩放...

已解决

我通过使用 PDF 视图而不是图像视图解决了这个问题(这是我想展示的 PDF)。我在 PDF 视图上将 autoScales 属性设置为 YES。

【问题讨论】:

  • 使用 Fruity Geek 给出的约束,您的程序应该可以工作。您确定没有其他由 IB 自动添加的约束吗?
  • 奇怪...我已经更新添加了一些信息到我的问题。仍然无法正常工作。

标签: cocoa autolayout nslayoutconstraint


【解决方案1】:

我假设您已经引用了以下示例中的视图:

NSView * parentView;
NSImageView * imageView;
[imageView setTranslatesAutoresizingMaskIntoConstraints:NO]; //Required to opt-in to autolayout
[parentView addSubview:imageView]; //Subview must exist before adding constraint. 

NSDictionary * views = NSDictionaryOfVariableBindings(imageView);
[parentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[imageView]|"
                                                                   options:0
                                                                   metrics:nil
                                                                     views:views]];
[parentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[imageView]|"
                                                                   options:0
                                                                   metrics:nil
                                                                     views:views]];

【讨论】:

  • 我在 IB 中的约束中添加了出口,并在添加代码之前将其删除。它半有效。视图现在大小相同,但我无法再调整窗口大小。有什么想法吗?
  • 更多信息。窗口被调整为我的视图大小,然后我无法调整窗口大小。
  • nsImageView.imageScaling = .scaleAxesIndependently 成功了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 2015-12-26
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多