【问题标题】:NSScrollView scrolling on AutoLayoutNSScrollView 在 AutoLayout 上滚动
【发布时间】:2016-05-14 15:42:25
【问题描述】:

我有一个NSScrollView,它被限制为 AutoLayout(固定在主视图的 0x0 坐标上,240px 固定宽度并等于主视图的 height)。

我遇到的问题是,当我的内容垂直增长时,剪辑似乎无法理解我想要的内容(启用垂直滚动)。

我都试过了:

[self.leftMenu setFrame:NSMakeRect(0, 0, menuWidth, 2000.0)];
[self.leftMenu setFrameSize:NSMakeSize(menuWidth, 2000.0)];

也触发这个:

[self.leftMenu needsUpdateConstraints];

但没有任何变化。我什至尝试默认显示垂直滚动条以查看是否是问题所在,但它确实无法启用滚动。

所以我的默认视图height445px(意味着滚动视图很容易溢出1000px),当我调整窗口大小时,它合法地显示了我以编程方式绘制的溢出内容。

我是通过这个iOS-variation 和这个older article 来的,但我真的不知道正确的方法是什么。在 iOS 开发中从来没有遇到过这个问题,但是这些看似简单的事情却引起了一些小麻烦。

【问题讨论】:

    标签: objective-c autolayout nsscrollview


    【解决方案1】:

    我相信您遇到的问题是因为在内容视图大于滚动视图的情况下,间距约束需要为负数。下图解释了应该在内容视图上放置哪些约束。

    内容视图的前导、尾随和顶部约束应为 0,底部应为 -1555(如果内容视图的高度为 2000)。这样做会告诉滚动视图需要滚动多少才能显示整个视图。

    我希望这会有所帮助,我通常使用 iOS,所以我遇到了与 UIScrollView 类似的问题。我知道这两者并不完全相同,但我尝试建立一个简单的项目并使用这些约束对其进行测试,但我确实得到了滚动。

    【讨论】:

      【解决方案2】:

      NSScrollView 不允许你直接修改 contentView 和 documentViews。您的内容包含在某种视图中 - 对于默认的 NSScrollView,NSScrollView 内的 NSClipView 内有一个 NSView

      无论您使用什么视图来保存不断增长的内容,只需将该视图重新分配给您的NSScrollView 的文档视图(在您适当地更新它的框架/大小之后)。这会触发滚动视图重新计算所有内容并根据需要激活滚动。

      view.addSubview(newButton)       //the view that contains your content
      scrollView.documentView = view   //triggers everything to be recalculated
      

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 2016-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多