UITableView 在 "pull down to refresh" 期间在顶部有额外的 space
UITableView has extra space on top during "pull down to refresh"
我的表格视图有问题。
它的顶部有一个 space ,如下所示:
当我打开 TasksTableViewController 时,问题没有显示。但是当我像这样从 TaskTableVC 打开另一个 viewcontroller 时:
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,问题就出现了。
当我 "pull down to refesh" 时,它恢复正常。
在我的 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];
});
}
我希望你能帮我解决这个奇怪的问题。
在视图 viewWillAppear
中设置 .
if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) {
[self setEdgesForExtendedLayout:UIRectEdgeBottom];
}
希望对您有所帮助。
您需要确保您的 UITableViewCell
具有正确的高度。
为此,您可以简单地实现 UITableViewDelegate
方法:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 90.0f; //CHANGE TO YOUR DESIRED HEIGHT.
}
希望对您有所帮助。
我用代码解决了我的问题。
我认为 Refresh control
有问题,所以我将其移出 dispatch_aysnc(dispatch_get_main_queue()
并添加了 [self.tableview reloadData
。那解决了我的问题。谢谢大家的回答。 :)
我的表格视图有问题。
它的顶部有一个 space ,如下所示:
当我打开 TasksTableViewController 时,问题没有显示。但是当我像这样从 TaskTableVC 打开另一个 viewcontroller 时:
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,问题就出现了。 当我 "pull down to refesh" 时,它恢复正常。
在我的 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];
});
}
我希望你能帮我解决这个奇怪的问题。
在视图 viewWillAppear
中设置 .
if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) {
[self setEdgesForExtendedLayout:UIRectEdgeBottom];
}
希望对您有所帮助。
您需要确保您的 UITableViewCell
具有正确的高度。
为此,您可以简单地实现 UITableViewDelegate
方法:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 90.0f; //CHANGE TO YOUR DESIRED HEIGHT.
}
希望对您有所帮助。
我用代码解决了我的问题。
我认为 Refresh control
有问题,所以我将其移出 dispatch_aysnc(dispatch_get_main_queue()
并添加了 [self.tableview reloadData
。那解决了我的问题。谢谢大家的回答。 :)