macos – 使用Interface Builder中的Auto Layout启用NSScrollView滚动其内容

概述我已经实现了一个自定义NSView,其中包含许多NSTextFields和其他NSView.然后,我使用Editor>在滚动视图中嵌入了该自定义视图.嵌入>滚动视图.这将在Outline中创建适当的层次结构,但我需要添加Auto Layout约束以指定此滚动视图应放置在视图中的位置(顶部,底部,前导,尾随).另外,我必须为剪辑视图添加自定义视图的约束,以便在正确的位置布置元素.这很有效,当我运行应 我已经实现了一个自定义NSVIEw,其中包含许多NSTextFIElds和其他NSVIEw.然后,我使用Editor>在滚动视图中嵌入了该自定义视图.嵌入>滚动视图.这将在Outline中创建适当的层次结构,但我需要添加auto Layout约束以指定此滚动视图应放置在视图中的位置(顶部,底部,前导,尾随).另外,我必须为剪辑视图添加自定义视图的约束,以便在正确的位置布置元素.这很有效,当我运行应用程序时,所有元素都会正确显示,并且视图会d回滚动.但是,当我减小主视图的高度以使并非所有元素都适合屏幕时,会出现自动布局警告,当我更新帧时,它会再次增加视图的高度.为了解决这个问题,我不得不将滚动视图的底部约束移到主视图中.现在,窗口设置为正确的大小,但我无法滚动自定义视图以到达内容的底部 – 它受到限制,因此它除了d性反d效果之外根本不会滚动,因为你’重新处于边缘限制.所以我的问题是,当我在XIB中布局所有元素并使用自动布局时,我必须做什么才能允许滚动视图滚动?解决方法 这是一般方法:

>使文档视图至少与剪辑视图一样高.或者,等效地使剪辑视图不高于文档视图.
>允许文档视图在高度上增长,但不会超出其子视图所需的范围.
>通过使用低优先级约束来防止文档视图中的歧义,以使其在给定其他约束的情况下尽可能小.

因此,例如,剪辑视图的底部和文档视图的底部之间应该存在约束,但它应该是不等式:SupervIEw.Bottom< = document VIEw.Bottom. (或者,等效地,document VIEw.Bottom> = SupervIEw.Bottom.)

在文档视图中,您可能在底部有一些文本字段或某些内容,以及它与文档视图底部之间的约束.使该约束成为不等式:SupervIEw.Bottom> = Text FIEld.Bottom标准间距.

这将导致文档视图的高度模糊不清.它可以是足够大的任何尺寸以适合其所有子视图.添加高度约束.将其优先级设置为51并将其常量设置为0.也就是说,它希望使视图具有0高度,但是处于非常低的优先级,因此几乎任何其他东西都将取代它.但它解决了模棱两可的问题.

如果要允许水平滚动,则需要在水平方向上执行相同的常规 *** 作.

更新:

还有另一种方法.在文档视图中配置约束以赋予其严格的大小(无不等式).这通常是从顶部到顶部子视图的约束链,从子视图的底部到另一个子视图的顶部等,以及从底部子视图的底部到文档视图的底部.同样导致尾随.

然后,剪辑视图和文档视图之间唯一必要的约束是顶部和前导约束.

如果您在此配置中进行测试,则可以调整大小并滚动滚动视图.所以,这很好.但是,当滚动视图的内容区域高于文档视图时,文档视图将固定到内容区域的底部.在这种情况下,你通常希望它固定在顶部.

原因是剪辑视图未翻转.此外,它正在调整其边界以匹配文档视图.因此,即使存在将文档视图固定到剪辑视图顶部的约束,剪辑视图的顶部也不是您期望的位置.剪辑视图将文档视图放在(0,0),它位于底部.

因此,最后一部分是创建一个NSClipVIEw的子类,它覆盖-isFlipped以返回YES.然后,将NIB中剪辑视图的类设置为子类.在那之后,它将按你的意愿工作.

总结

以上是内存溢出为你收集整理的macos – 使用Interface Builder中的Auto Layout启用NSScrollView滚动其内容全部内容,希望文章能够帮你解决macos – 使用Interface Builder中的Auto Layout启用NSScrollView滚动其内容所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1018331.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存