在UITableViewScrollPosition之后找到UITable的UIViewViewCell框架

时间:2015-11-04 14:29:56

标签: ios objective-c uitableview uiview

所以我这样做是为了将我的表视图控制器中的滚动编程到我的第一个单元格。

 NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
                [self.tableView scrollToRowAtIndexPath:indexPath
                                     atScrollPosition:UITableViewScrollPositionBottom
                                             animated:YES];

然后我想获取此视图的新帧:

 NSArray *a=[self.tableView visibleCells];
UIView *view = [a firstObject];

但是,此视图给出的帧(我的单元格数组中的第一个)返回滚动发生前的位置。

我已尝试将其放入动画块中以确保在尝试找到它的位置之前已完成滚动

2 个答案:

答案 0 :(得分:0)

帧始终与超级视图相关。如果您有兴趣,那么调试(或打印出)单元格视图的超级视图。它不是直接表视图。 (以前是iOS 7或8左右,但现在它嵌入在一些与单元格一起滚动的视图对象中。)

您可以尝试获取其超级视图的帧。 但是,您可以更好地将单元格的原点与基本视图进行比较(chart.tooltip.position({ top: 100, left: 100 })();self.view的角度来看UIViewController,如果是标准UITableView 1}})。为此,您可以使用UITableViewControllerconvertPoint:fromView方法。

答案 1 :(得分:0)

事实证明这是因为我把它包装在动画中的动画中,因此SECOND动画在检查帧之前没有完成:

 [UIView animateWithDuration:0.5 animations:^{

                NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
                [self.tableView scrollToRowAtIndexPath:indexPath
                                     atScrollPosition:UITableViewScrollPositionBottom
                                             animated:NO];

            }completion:^(BOOL finished)
            {
                 NSArray *a=[self.tableView visibleCells];
                InstructionView *iv = [[InstructionView alloc] initWithTargetView:[a firstObject] andInstructionType:kNeedYouInstruction];
                iv.delegate = self;
                [iv show];
            }];

将第二个动画更改为NO可以解决我的问题:D