[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以使行居中所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)