UITableViewiOS 知识收集

iOS UITableView sectionHeader和se

2020-09-24  本文已影响0人  李丘
需求

当 UITableView 设置为 UITableViewStylePlain,且设置了sectionHeader 和 sectionFooter ,在滑动的时候,头部和尾部会有悬停的效果。

在某些UI搭建中,我们需要取消这个悬停效果。

解决

当然最简单的解决方法就是把 UITableViewStylePlain 修改为 UITableViewStyleGrouped,但是我们的目的是在 UITableViewStylePlain 这个设置下取消这个悬停效果,所以需要用别的方法来达到这个目的。

解决这个问题的思路是,重写 header、footer 的 setFrame: 方法,在 dequeueReusableHeaderFooterViewWithIdentifier 出 header 或者 footer 的时候,设置 frame 为 改变之后的 frame,从而达到取消悬停的效果。

header 里面的关键代码如下:

header.h

@interface SectionHeaderView : UITableViewHeaderFooterView

@property (nonatomic,weak) UITableView *tableView;

@property(nonatomic,assign) NSUInteger section;

@end

header.m

/*
 非悬停header 设置Header的frame为改变之后的frame, 当Header到达顶部的时候,Header就会跟着单元内容一起滚动,不再悬停
 */
- (void)setFrame:(CGRect)frame {
    
    [super setFrame:[_tableView rectForHeaderInSection:_section]];
}

footer 里面的关键代码如下:

footer.h

@interface SectionFooterView : UITableViewHeaderFooterView

@property (nonatomic,weak) UITableView *tableView;

@property(nonatomic,assign) NSUInteger section;

@end

footer.m

/*
 非悬停Footer 设置Footer的frame为改变之后的frame, 当Footer到达底部的时候,Footer就会跟着单元内容一起滚动,不再悬停
 */
- (void)setFrame:(CGRect)frame {
    
    [super setFrame:[_tableView rectForFooterInSection:_section]];
}
Demo

详细请看 Demo

上一篇下一篇

猜你喜欢

热点阅读