UITable视图 - Table Header 如果删除视图,视图会保留间距
UITableView - Table Header View leaves spacing if view is removed
我有一个 UITableViewController,如果满足某些条件,它将显示 table 视图 header(不是 header 部分)被满足。在加载时显示带或不带 header 视图的控制器都很好。但是,如果我显示 header,然后将其删除,间距(header 的框架所在的位置)每次都会保留在 table 视图的顶部。
我在删除 table 视图 header 时尝试了以下所有组合,但没有成功:
[self.tableView beginUpdates];
self.tableView.tableHeaderView = nil;
self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectZero];
[self.tableView reloadData];
[self.tableView endUpdates];
还有其他人遇到过这个吗?
Table查看Header代码:
- (void)updateTableHeaderView
{
if (self.alerts.count && self.isViewLoaded) {
[self.tableView beginUpdates];
UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, CGRectGetWidth(self.tableView.bounds), 40.0f)];
headerView.preservesSuperviewLayoutMargins = YES;
self.tableView.tableHeaderView = headerView;
UIButton *alertButton = [UIButton buttonWithType:UIButtonTypeCustom];
alertButton.tintColor = [UIColor whiteColor];
alertButton.translatesAutoresizingMaskIntoConstraints = NO;
[alertButton setBackgroundImage:[UIImage imageWithColor:alertTintColor] forState:UIControlStateNormal];
[alertButton setBackgroundImage:[UIImage imageWithColor:alertHighlightedTintColor] forState:UIControlStateHighlighted];
[alertButton addTarget:self action:@selector(alertButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
[headerView addSubview:alertButton];
NSDictionary *views = NSDictionaryOfVariableBindings(alertButton);
NSDictionary *metrics = nil;
[NSLayoutConstraint activateConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[alertButton]|" options:0 metrics:metrics views:views]];
[NSLayoutConstraint activateConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[alertButton]|" options:0 metrics:metrics views:views]];
[self.tableView endUpdates];
}
else if (self.isViewLoaded) {
[self.tableView beginUpdates];
self.tableView.tableHeaderView = nil;
[self.tableView endUpdates];
}
}
请看您是否也处理了:
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
这似乎是一个 iOS 错误,这是删除 tableHeaderView 的当前解决方法,它的间距已修复:
self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, CGRectGetWidth(self.tableView.bounds), 1.0f)];
我有一个 UITableViewController,如果满足某些条件,它将显示 table 视图 header(不是 header 部分)被满足。在加载时显示带或不带 header 视图的控制器都很好。但是,如果我显示 header,然后将其删除,间距(header 的框架所在的位置)每次都会保留在 table 视图的顶部。
我在删除 table 视图 header 时尝试了以下所有组合,但没有成功:
[self.tableView beginUpdates];
self.tableView.tableHeaderView = nil;
self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectZero];
[self.tableView reloadData];
[self.tableView endUpdates];
还有其他人遇到过这个吗?
Table查看Header代码:
- (void)updateTableHeaderView
{
if (self.alerts.count && self.isViewLoaded) {
[self.tableView beginUpdates];
UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, CGRectGetWidth(self.tableView.bounds), 40.0f)];
headerView.preservesSuperviewLayoutMargins = YES;
self.tableView.tableHeaderView = headerView;
UIButton *alertButton = [UIButton buttonWithType:UIButtonTypeCustom];
alertButton.tintColor = [UIColor whiteColor];
alertButton.translatesAutoresizingMaskIntoConstraints = NO;
[alertButton setBackgroundImage:[UIImage imageWithColor:alertTintColor] forState:UIControlStateNormal];
[alertButton setBackgroundImage:[UIImage imageWithColor:alertHighlightedTintColor] forState:UIControlStateHighlighted];
[alertButton addTarget:self action:@selector(alertButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
[headerView addSubview:alertButton];
NSDictionary *views = NSDictionaryOfVariableBindings(alertButton);
NSDictionary *metrics = nil;
[NSLayoutConstraint activateConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[alertButton]|" options:0 metrics:metrics views:views]];
[NSLayoutConstraint activateConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[alertButton]|" options:0 metrics:metrics views:views]];
[self.tableView endUpdates];
}
else if (self.isViewLoaded) {
[self.tableView beginUpdates];
self.tableView.tableHeaderView = nil;
[self.tableView endUpdates];
}
}
请看您是否也处理了:
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
这似乎是一个 iOS 错误,这是删除 tableHeaderView 的当前解决方法,它的间距已修复:
self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, CGRectGetWidth(self.tableView.bounds), 1.0f)];