最近小编收到很多问题,其中一个就是下面小编为大家整理一下关于怎么判断某个cell是否显示在屏幕上的步骤,希望这些方法能够帮助到大家。
工具/原料
电脑
方法/步骤
1、首先,在成为某个视图的子视图时,先移除之前的kVO,然后对视图层级中所有class为UIScrollView的contentSize添加KVO。
2、然后,输入程序-(void)didMoveToSuperview{[s娣定撰钠elfunKVO];UI蕺清寤凯View*aView=self.superview;while(aView){if([aViewisKindOfClass:[UIScrollViewclass]]){[selfobserver:aViewforKeyPath:@"contentSize"options:NSKeyValueObservingOptionNewcontext:(void*)__LINE__];}aView=aView.superview;}}
3、然后,需要设置TableViewseparatorStyle属性UITableViewCellSeparatorStyleNone即除划。代码:tableView.separatorStyle=UITableViewCellSeparatorStyleNone;
4、当然,如果记录KVO了哪些视图的,方便及时移除:-(BOOL)isDisplayedInScreen{if(self==nil){returnFALSE;}CGRectscreenRect=[UIScreenmainScreen].bounds;
5、然后,打印监测到的值变化:staticNSMutableArray*rec娣定撰钠eiverArr; stat足毂忍珩icSunTableViewCell*cell; -(void)observer:(NSObject*)receiverforKeyPath:(NSString*)keyPathoptions:(NSKeyValueObservingOptions)optionscontext:(void*)context{ if(cell&&cell!=self){ return; } cell=self; [receiveraddObserver:selfforKeyPath:keyPathoptions:optionscontext:context]; if(!receiverArr){ receiverArr=[NSMutableArrayarray]; } [receiverArraddObject:receiver]; } -(void)dealloc{ [selfunKVO];
6、最后,获取该view与window交叉的RectCGRectintersectionRect=CGRectIntersection(rect,screenRect);if(CGRectIsEmpty(intersectionRect)||CGRectIsNull(intersectionRect)){returnFALSE;}returnTRUE;}