在NSScrollView中改变一个NSView的框架,最后会得到奇怪的值。

问题描述 投票:1回答:1

我的代码遇到了一个奇怪的问题,希望别人有更好的想法来处理这个问题。

**总结一下我想实现的目标。**

我有一个看起来像这样的编辑器。右侧有一个检查器面板,我可以手动改变当前选定视图的框架(它位于另一个NSView中,是NSScrollView的文档视图)。

**实现概要。**

NSScrollView里面的主视图并没有直接使用autolayout,因为我需要能够手动设置框架,所以我把 translatesAutoresizingMaskIntoConstraints 属性为true(默认值),NSScrollView内部的所有子视图都是如此。所以我最终在设置框架时自动创建了约束。

问题是。

当我设置框架时,比如说(1, 0, 100, 100)出于某种原因,自动布局引擎会考虑到NSScrollView的放大倍数,并重新调整框架,所以最终的框架可能看起来像(1.74, 0, 100, 100)。虽然我理解这一点,但问题是,我可以禁止这种行为吗?是否可以让帧值增量为1.0,同时确保无论NSScrollView的放大倍数是多少,Autolayout都不会把最终的帧值搞砸?

谢谢你!我遇到了一个奇怪的问题。

swift macos autolayout nsview nsscrollview
1个回答
1
投票

在放大的NSScrollView内的自动布局视图有时会给出非常奇怪的值,我还没有真正弄清楚什么时候和为什么。

我曾处理过类似的问题,根据superview的放大倍数手动调整视图的位置,或者通过子类化它们并为它们写一个方法来考虑放大倍数。

所以,举个例子。

CGFloat factor = 1 / magnification;
element.frame = NSRectMake(x * factor, y * factor, ...);

希望能帮到你

© www.soinside.com 2019 - 2024. All rights reserved.