导航控制器推送另一个控制器触发tableview调用scrollViewDidScroll:

时间:2014-08-11 15:36:34

标签: ios uitableview

我在导航控制器的根视图控制器中有一个tableview。 我使用JBParallaxCell作为主视图并将其转换为detailView,然后将表单detailview返回到JBParallaxCell,它将重置imageView位置。

JBParallaxCell用于在tableview中创建视差图像视图。但是,当导航控制器推回到tableview时,图像会闪烁,因为它会重置图像视图的位置。

我该如何修复这个错误? 谢谢你的帮助!

以下是一些代码段:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    // Get visible cells on table view.
    NSArray *visibleCells = [self.tableView visibleCells];

    for (JBParallaxCell *cell in visibleCells)
    {
        [cell cellOnTableView:self.tableView didScrollOnView:self.view];
    }

}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    JBViewController *controller = [[JBViewController alloc] init];
    [self.navigationController pushViewController:controller animated:YES];
}

JBParallaxCell.h:

@interface JBParallaxCell : UITableViewCell

@property (weak, nonatomic) IBOutlet UIImageView *parallaxImage;
@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
@property (weak, nonatomic) IBOutlet UILabel *subtitleLabel;

- (void)cellOnTableView:(UITableView *)tableView didScrollOnView:(UIView *)view;

@end

JBParallaxCell.m:

@implementation JBParallaxCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];
    // Configure the view for the selected state
}

- (void)cellOnTableView:(UITableView *)tableView didScrollOnView:(UIView *)view
{
    NSLog(@"cell scrolling...");
    CGRect rectInSuperview = [tableView convertRect:self.frame toView:view];

    float distanceFromCenter = CGRectGetHeight(view.frame)/2 - CGRectGetMinY(rectInSuperview);
    float difference = CGRectGetHeight(self.parallaxImage.frame) - CGRectGetHeight(self.frame);
    float move = (distanceFromCenter / CGRectGetHeight(view.frame)) * difference;


    CGRect imageRect = self.parallaxImage.frame;
    imageRect.origin.y = -(difference/2)+move;
    self.parallaxImage.frame = imageRect;
}

1 个答案:

答案 0 :(得分:0)

我有类似的问题,在我从视图控制器调用popViewControllerAnimated:YES后,我的表格视图会自动滚动到顶部位置。

我认为这是IOS7 / 8的错误。 在IOS9 +它没关系。

estimatedRowHeight与实际高度的差异越大,推送segue发生时表的跳跃越多。

评论后这一行:

self.tableView.estimatedRowHeight = 64.0;

UITableView不再跳了。