【问题标题】:Changing frame of an NSView inside NSScrollView ends up with weird values在 NSScrollView 中更改 NSView 的框架最终会产生奇怪的值
【发布时间】:2020-04-01 13:54:55
【问题描述】:

我的代码遇到了一个奇怪的问题,我希望其他人对如何处理这个问题有更好的想法。

**我想要达到的目标总结:**

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

**实现总结:**

NSScrollView 内的主视图不直接使用自动布局,因为我需要能够手动设置框架,我将所有子视图的 translatesAutoresizingMaskIntoConstraints 属性保留为 true(默认值)在 NSScrollView 里面。所以我最终会在设置框架时自动创建约束。

问题:

当我设置框架时,比如说 (1, 0, 100, 100) 出于某种原因,自动布局引擎会考虑 NSScrollView 的放大率值并重新调整框架,因此最终框架可能会结束看起来像 (1.74, 0, 100, 100)。虽然我确实理解这一点,但问题是,我可以禁用此行为吗?无论 NSScrollView 放大率值如何,是否可以在确保 Autolayout 不会拧紧最终帧的同时将帧值增量为 1.0?

谢谢!

【问题讨论】:

    标签: swift macos autolayout nsview nsscrollview


    【解决方案1】:

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

    我已经解决了类似的问题,方法是根据超级视图的放大倍数手动调整视图的位置,或者对它们进行子类化并为它们编写一个方法来考虑放大倍数。

    所以,例如:

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 2012-07-19
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 1970-01-01
      • 2015-10-04
      相关资源
      最近更新 更多