Jor*_*n H 7 macos cocoa interface-builder nsscrollview autolayout
我已经实现了一个NSView
包含许多NSTextField
s和其他NSView
s 的自定义.然后,我使用编辑器>嵌入>滚动视图在滚动视图中嵌入该自定义视图.这将在Outline中创建适当的层次结构,但我需要添加Auto Layout约束以指定此滚动视图应放置在视图中的位置(顶部,底部,前导,尾随).另外,我必须为剪辑视图添加自定义视图的约束,以便在正确的位置布置元素.这很有效,当我运行应用程序时,所有元素都会正确显示,并且视图会弹回滚动.但是,当我减小主视图的高度以使并非所有元素都适合屏幕时,会出现自动布局警告,当我更新帧时,它会再次增加视图的高度.为了解决这个问题,我不得不将滚动视图的底部约束移到主视图中.现在,当我运行应用程序时,窗口设置为正确的大小,但我无法滚动自定义视图以到达内容的底部 - 它受到限制,因此它除了弹性反弹效果之外根本不会滚动,因为你'重新处于边缘限制.所以我的问题是,当我在XIB中布局所有元素并使用自动布局时,我必须做什么才能允许滚动视图滚动?
Ken*_*ses 13
这是一般方法:
因此,例如,剪辑视图的底部和文档视图的底部之间应该存在约束,但它应该是不等式:Superview.Bottom <= Document View.Bottom.(或者,等效地,Document View.Bottom> = Superview.Bottom.)
在文档视图中,您可能在底部有一些文本字段或某些内容,以及它与文档视图底部之间的约束.使该约束成为不等式:Superview.Bottom> = Text Field.Bottom +标准间距.
这将导致文档视图的高度模糊不清.它可以是足够大的任何尺寸以适合其所有子视图.添加高度约束.将其优先级设置为51并将其常量设置为0.也就是说,它希望使视图具有0高度,但是处于非常低的优先级,因此几乎任何其他东西都将取代它.但它解决了模棱两可的问题.
如果要允许水平滚动,则需要在水平方向上执行相同的常规操作.
更新:
还有另一种方法.在文档视图中配置约束以赋予其严格的大小(无不等式).这通常是从顶部到顶部子视图的约束链,从子视图的底部到另一个子视图的顶部等,以及从底部子视图的底部到文档视图的底部.同样导致尾随.
然后,剪辑视图和文档视图之间唯一必要的约束是顶部和前导约束.
如果您在此配置中进行测试,则可以调整大小并滚动滚动视图.所以,这很好.但是,当滚动视图的内容区域高于文档视图时,文档视图将固定到内容区域的底部.在这种情况下,你通常希望它固定在顶部.
原因是剪辑视图未翻转.此外,它正在调整其边界以匹配文档视图.因此,即使存在将文档视图固定到剪辑视图顶部的约束,剪辑视图的顶部也不是您期望的位置.剪辑视图将文档视图放在(0,0),它位于底部.
因此,最后一部分是创建一个返回的NSClipView
覆盖的子类.然后,将NIB中剪辑视图的类设置为子类.在那之后,它将按你的意愿工作.-isFlipped
YES
归档时间: |
|
查看次数: |
3722 次 |
最近记录: |