我在导航控制器的根视图控制器中有一个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
不再跳了。