【问题标题】:having issues scrolling to the end of NSScrollView programmatically以编程方式滚动到 NSScrollView 末尾时出现问题
【发布时间】:2016-07-20 16:22:44
【问题描述】:

我有一个NSScrollView,每次单击按钮时,滚动视图中都会添加一个对象,我添加了下面的代码,因此每次按下按钮并且对象添加到滚动视图中时,我的滚动视图都会滚动到添加新对象的滚动视图的结尾:

let widthcc = scollingView.documentView!.frame.size.width + 156
    scollingView.contentView.scrollPoint( NSPoint ( x: widthcc, y: 0))

但我没有得到我想要的结果,无论我在我最后添加的实际对象后面的一个对象中做什么新的滚动位置。

我做错了什么?

这是我的 xcode 项目: https://dl.dropboxusercontent.com/u/64067896/2_infinite_scrolle.zip

【问题讨论】:

    标签: swift xcode macos nsscrollview


    【解决方案1】:

    快速解决方案是这样的:

         @IBAction func myButtonAction(sender: AnyObject) {
        add()
    
        NSOperationQueue.mainQueue().addOperationWithBlock {[unowned self] in
    
            let widthcc = self.scollingView.documentView!.frame.size.width + 156
            print(widthcc)
            self.scollingView.contentView.scrollPoint( NSPoint ( x: widthcc, y: 0))
        }
    
    }
    

    它让布局完成调整您的视图大小,然后在 UI 循环循环中滚动到末尾。

    【讨论】:

    • 非常感谢 Eugene 完美的工作。但我有点困惑,我认为代码是逐行运行的,所以 add() 函数应该首先运行,并且布局应该在 scrollPoint 方法之前调整大小!你能告诉我这是为什么吗?
    • 布局过程有几个阶段,其中使用了几个标志。这是一个相当复杂的过程。实际上,添加项目的逻辑实际上应该是不同的。有一大堆关于布局如何工作的 WWDC 视频,因此您可以从中学到一些东西。这就是为什么我说它是“快速”的解决方案。我无法提供更好的代码 sn-p,因为我还需要记住学习这些序列和标志(我很久以前使用过,现在已经忘记了)。
    猜你喜欢
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    相关资源
    最近更新 更多