objective-c – 滚动NSTableView以使行居中

objective-c – 滚动NSTableView以使行居中,第1张

概述我想以编程方式滚动NSTableView,以便特定行居中.滚动NSTableView以使特定行可见是很简单的: [theTableView scrollRowToVisible:pos]; 但是,通常所讨论的行位于可见区域的底部,而我希望它大致位于中心. 另一种愚蠢的方法是滚动几行,超出我想要显示的那一行,例如: // pos = index of desired row // numRo 我想以编程方式滚动NStableVIEw,以便特定行居中.滚动NStableVIEw以使特定行可见是很简单的:

[thetableVIEw scrollRowToVisible:pos];

但是,通常所讨论的行位于可见区域的底部,而我希望它大致位于中心.

另一种愚蠢的方法是滚动几行,超出我想要显示的那一行,例如:

// pos = index of desired row    // numRows = number of rows in the table    NSRect visibleRect = [resultstableVIEw visibleRect];    NSRange visibleRange = [resultstableVIEw rowsInRect:visibleRect];    NSUInteger offset = visibleRange.length/2;    NSUInteger i;    if (pos + offset >= numRows)        i = numRows - 1;    else if (pos < visibleRange.length)        i = pos;    else        i = pos + offset;    [resultstableVIEw scrollRowToVisible:i];

如果所有行的高度完全相同,则此方法有效,但我有兴趣制作具有不同高度的行.

有没有更好的,也许更直接的方式来做到这一点?例如,我注意到NStableVIEw包含在NSScrollVIEw中….(该表是使用Interface Builder制作的.)

谢谢!

解决方法 这适用于我的NStableVIEw的子类

func scrollRowToVisible(row: Int,animated: Bool) {    if animated {        guard let clipVIEw = supervIEw as? NSClipVIEw,let scrollVIEw = clipVIEw.supervIEw as? NSScrollVIEw else {                assertionFailure("Unexpected NStableVIEw vIEw hIEarchy")                return        }        let rowRect = rect(ofRow: row)        var scrollOrigin = rowRect.origin        let tableHalfheight = clipVIEw.frame.height * 0.5        let rowRectHalfheight = rowRect.height * 0.5        scrollOrigin.y = (scrollOrigin.y - tableHalfheight) + rowRectHalfheight        if scrollVIEw.responds(to: #selector(NSScrollVIEw.flashScrollers)) {            scrollVIEw.flashScrollers()        }        clipVIEw.animator().setBoundsOrigin(scrollOrigin)    } else {        scrollRowToVisible(row)    }}

然后你可以打电话:

self.tableVIEw.scrollRowToVisible(self.tableVIEw.selectedRow,animated:true)

选择行后

总结

以上是内存溢出为你收集整理的objective-c – 滚动NSTableView以使行居中全部内容,希望文章能够帮你解决objective-c – 滚动NSTableView以使行居中所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1001233.html

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

发表评论

登录后才能评论

评论列表(0条)

保存