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

JBParallaxCell用于在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;
}

最佳答案

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

而且我认为这是IOS7 / 8的错误。
在IOS9 +中可以。
estimatedRowHeight与实际高度的差异越大,在进行推送搜索时表格将跳得越多。

评论之后,此行:

self.tableView.estimatedRowHeight = 64.0;
UITableView不再跳了。

10-07 20:53