UITableView 在“下拉刷新”期间顶部有额外空间

Posted

技术标签:

【中文标题】UITableView 在“下拉刷新”期间顶部有额外空间【英文标题】:UITableView has extra space on top during "pull down to refresh" 【发布时间】:2015-10-15 05:54:32 【问题描述】:

我的表格视图有问题。 它的顶部有一个空间,如下所示:

当我打开 TasksTableViewController 时,问题没有出现。但是当我像这样从 TaskTableVC 打开另一个视图控制器时:

 FilterTasksTableViewController * fttvc = [self.storyboard instantiateViewControllerWithIdentifier:@"FilterTasksTableViewController"];
fttvc.delegate = self;
UINavigationController * navVC = [self.storyboard instantiateViewControllerWithIdentifier:@"PopoverNavigationController"];
[navVC setViewControllers:@[fttvc]];
[self presentViewController:navVC animated:YES completion:nil];

回到TaskTableVC,问题就出现了。 当我“下拉刷新”时,它恢复正常。

在我的 TaskTableVC 代码中:

- (void)viewWillAppear:(BOOL)animated 
//other code
[self populate];


- (void)viewDidLoad 

 dispatch_async(dispatch_get_main_queue(), ^

   self.refreshControl = [[UIRefreshControl alloc] init];

    self.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@" "];

    [self.refreshControl addTarget:self action:@selector(refresh) forControlEvents:UIControlEventValueChanged];

    [self setRefreshControl:self.refreshControl];

);

    [self populate];


- (void)populate 

TaskHandler *handler = [[TaskHandler alloc] initWithContext:_context];
NSArray *allTasks = [handler getAll];

_tasks = [self filterTasks:allTasks];

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"startDate" ascending:NO];
NSArray *descriptors = [NSArray arrayWithObjects:descriptor, nil];
_tasks = [[NSMutableArray alloc] initWithArray:[_tasks sortedArrayUsingDescriptors:descriptors]];
dispatch_async(dispatch_get_main_queue(), ^
    [self.tableView reloadData];
    [self.refreshControl endRefreshing];
);


我希望你能帮助我解决这个奇怪的问题。

【问题讨论】:

你在- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; UITableView 委托方法中返回什么?我认为您的 UITableViewCell 的高度不正确。 您好,您只需要打开 translucent = True 或添加一个额外的黑白表和您的主视图。目前,您的表格是您视图中的第一个子视图。 【参考方案1】:

我用代码解决了我的问题。 我认为 Refresh control 有问题,所以我将其移出 dispatch_aysnc(dispatch_get_main_queue() 并添加了 [self.tableview reloadData 。这解决了我的问题。谢谢大家的回答。 :)

【讨论】:

【参考方案2】:

在视图viewWillAppear设置。

if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) 

    [self setEdgesForExtendedLayout:UIRectEdgeBottom];


希望对你有帮助。

【讨论】:

UIRectEdgeBottom 将其更改为 UIRectEdgeTop【参考方案3】:

您需要确保您的 UITableViewCell 具有正确的高度。

为此,您可以简单地实现UITableViewDelegate 方法:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

  return 90.0f; //CHANGE TO YOUR DESIRED HEIGHT. 

我希望这会有所帮助。

【讨论】:

以上是关于UITableView 在“下拉刷新”期间顶部有额外空间的主要内容,如果未能解决你的问题,请参考以下文章

下拉以使用静态单元格刷新 UITableView

IOS怎么实现一个UITableView的下拉刷新

iOS UITableView-下拉刷新上拉加载

iOS UITableView-下拉刷新上拉加载

IOS学习之UiTableView下拉刷新与自动加载更多,百年不变的效果

下拉刷新时 UITableview 出错,所有数据重复。任何人都可以帮助使用 Swift 3 , Xcode 8