我需要有可能将所选行放在帧的中间。因此,如果我选择第一行或最后一行,则该行必须位于中心,而不是剪切到tableview的顶部(或底部)(类似于UIPickerView
)。
这是我在scrollViewWillEndDragging
上的代码:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)targetContentOffset {
CGFloat rowHeight = [delegate rowHeightForMyPickerView:self];
CGFloat floatVal = targetContentOffset->y / rowHeight;
NSInteger rounded = (NSInteger)(lround(floatVal));
targetContentOffset->y = rounded * rowHeight;
NSLog(@"Offset: %f Float: %f Row: %d",targetContentOffset->y,floatVal,rounded);
[delegate myPickerView:self isOverRow:rounded];
}
使用此代码,我创建了捕捉效果,但rounded
不是正确的行。用双倍高度改变第一个和最后一个单元格高度会使问题消失,但我不喜欢这个解决方案。
答案 0 :(得分:0)
使用UITableView
方法,indexPath
课程也可以使用动画滚动到所选的scrollToRowAtIndexPath:atScrollPosition:animated
。最好在tableView:didSelectRowAtIndexPath:indexPath
方法中添加:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; //scrolls the selected cell to middle
}