How to place an NSButton over an NSTableView

你。 提交于 2019-12-10 08:31:16

问题


1) No table behind button 2) Table loaded 3) After scrolling

If I place a button over an NSTableView I get artifacts being left behind after scrolling. Does anyone know how to fix this?

My current solution is just to split the section with the table into 2. The lower portion is a disabled button in the background.


回答1:


I had a similar problem and solved it, see Why does an NSTextField leave artifacts over an NSTableView when the table scrolls?. Essentially OSX will draw the contents of the table and let the parent scroll view move the cached contents avoiding redraws to be performant. By subclassing the parent scroll view it can be forced to refresh the table hooking the reflectScrolledClipView: method. Then the whole table, including overlays, will be redrawn with each scroll.




回答2:


Try the NSScrollView method - (void)addFloatingSubview:(NSView *)view forAxis:(NSEventGestureAxis)axis All tableviews should normally be inside a ScrollView.




回答3:


That's because the scroll view is set to copy its contents when scrolling and only redraw the newly-uncovered part as a performance optimization. To turn that off, use

myTableView.enclosingScrollView.contentView.copiesOnScroll = NO;

though that will make scrolling use more CPU (you can also do this in the XIB, look for a 'copies on scroll' checkbox).

Probably a better approach would be to switch the scroll view and the button to be layer-backed:

myTableView.enclosingScrollView.wantsLayer = YES;
myButtonView.wantsLayer = YES;

(Again, you can set this in the 'Layers' inspector of the XIB file, where you can click a checkbox next to each view to give it a layer) Now, the scroll view will only copy stuff from its own layer (which no longer includes your button). Also, now all the compositing of the text view will be done using in the graphics card. This works fine with an opaque push button, however, if you put text on a transparent background in its own layer (e.g. if you have a transparent pushbutton with a title), you lose sub-pixel anti-aliasing.



来源:https://stackoverflow.com/questions/15773316/how-to-place-an-nsbutton-over-an-nstableview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!