1。 所以我就把它 作为一个section的 headerView。
也就是在函数:
- (UIView *)tableView:(UITableView
*)tableView viewForHeaderInSection:(NSInteger)section
里面返回 这个UIView。
但是,由于这个UIView占的空间很大,基本占用整个屏幕的高度,而滚动tableView的时候,只滚动cell的内容,而这个section的headerView却不跟着滚动。
后面,我想出了方法2。
2。 设置 tableView的 style为 UITableViewStyleGrouped,然后让
-
(NSInteger)numberOfSectionsInTableView:(UITableView
*)tableView
返回1。
这样确实可以让 headerView,在滚动tableView的时候,跟随着cell的内容一起滚动。但是,我发现,下面的cell都被加上了边框,而且cell的水平显示范围变窄了。
所以尝试了方法3。
3。 将UIView设置为 整个tableView的headerView,而不是 section 0的headerView
self.tableView.tableHeaderView=header
这样,就可以完美的满足 headerView跟随cell的内容一起滚动的要求拉。
结论:设置 UIView为 tableView的tableHeaderView即可实现headerView跟随tableView一起滚动的效果。转载
我碰到了这个问题,我也希望改变的动画,所以我做的UIView的子类,为我的头意见,并补充- (void)adjustTableHeaderHeight:(NSUInteger)newHeight{
NSUInteger oldHeight = self.frame.size.height
NSInteger originChange = oldHeight - newHeight
[UIView beginAnimations:nil context:nil]
[UIView setAnimationDuration:1.0f]
[UIView setAnimationDelegate:self]
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)]
self.frame = CGRectMake(self.frame.origin.x,
self.frame.origin.y,
self.frame.size.width,
newHeight)
for (UIView *view in [(UITableView *)self.superview subviews]) {
if ([view isKindOfClass:[self class]]) {
continue
}
view.frame = CGRectMake(view.frame.origin.x,
view.frame.origin.y - originChange,
view.frame.size.width,
view.frame.size.height)
}
[UIView commitAnimations]
}
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context{
[(UITableView *)self.superview setTableHeaderView:self]
}
这实质上是对动画的UITableView的所有不属于类类型调用类的子视图。在动画的最后,它调用setTableHeaderView在父视图(在UITableView中)-如果没有这个的UITableView的内容将跳回到下一个滚动。我对这个迄今为止发现的唯一的限制是,如果试图滚动的UITableView,而动画正在发生,滚动将动画,犹如头视图尚未调整(不是一个大问题,如果动画快) 。
自定义的headerView里 重写 willMoveToSuperView这时候因为子视图什么的 已经弄好了,所以你只要调用下系统给的根据autolayout计算高度的方法,重新设置下headerview的frame就行了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)