我有一个UITableView,其中有很多部分。如果我将UITableView类型设为普通,则滚动时所有部分都会粘在顶部。
我的要求是只保留第0节的标题,其他标题应该浮动(就像你将样式设置为组一样)。
另请注意,我的TableView具有崩溃和扩展功能,我使用了这些部分。
我的UItableView样式设置为plain
public enum UITableViewStyle : Int {
case plain // regular table view
}
我使用
实现了自定义节标题func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
和
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
非常感谢任何正确方向的暗示
答案 0 :(得分:0)
这种情况有一个棘手的解决方案。我试图在 Swift 中编写解决方案但是现在我无法找到解决方案,但我已经在Objective-C
中实现了上述解决方案。
您需要子类UITableView
并公开私有API并覆盖它们,以便您可以实现所需。
下面是一个示例TableView。
@interface MYTableView : UITableView
@property (assign,nonatomic)BOOL shouldFloatHeader;
@property (assign,nonatomic)BOOL shouldFloatFooter;
- (BOOL)allowsHeaderViewsToFloat;
- (BOOL)allowsFooterViewsToFloat;
@end
@implementation MYTableView
- (BOOL)allowsHeaderViewsToFloat{
return _ shouldFloatHeader;
}
- (BOOL)allowsFooterViewsToFloat{
return shouldFloatFooter;
}
@end
现在您也可以在swift中使用上面的TableView
。我已经运行并测试了它。
现在让第一部分变粘,所有其他部分不粘,我们需要在这里有一些技巧。下面是一个例子。
有UITableViewDelegate
方法didEndDisplayingHeader
只是实现此方法,并像这样切换shouldFloatHeader
..
-(void)tableView:(MYTableView *)tableView didEndDisplayingHeaderView:(UIView *)view forSection:(NSInteger)section {
if (section >= 1) {
tableView.shouldFloatHeader = YES;
}else {
tableView.shouldFloatHeader = NO;
}
}
func tableView(_ tableView: MYTableView, didEndDisplayingHeaderView view: UIView, forSection section: Int) {
if section >= 1 {
tableView.shouldFloatHeader = true
}else {
tableView.shouldFloatHeader = false
}
}
使用私有API会导致您的应用程序在某些情况下拒绝。
答案 1 :(得分:-1)
正如我所说,你不能让某些部分变粘,有些部分浮动。相反,我建议使用不同的单元格作为除第0部分之外的每个部分的标题。仅对于第0部分,您应该使用节标题视图。将tableview样式设置为Plain。