使用自动布局在UITableView中强制执行UIView填充屏幕

时间:2014-09-16 23:02:35

标签: ios uitableview uiview autolayout ios8

我正在尝试向我的表添加一个背景视图,该视图应该在大小上拉伸以在旋转时始终填充表格的框架。为了简化问题,我只是尝试在表格视图中添加红色UIVIew,然后使用自动布局以确保红色视图始终填充整个可见背景。如果我没有实现自动布局,旋转时您可以看到红色不再填充屏幕上的可见区域。但是当我使用下面的代码实现自动布局时,屏幕上不再显示红色视图。我只看到默认的表格视图backgroundColor。为什么,我的自动布局代码出了什么问题?

UIView *view = [[UIView alloc] initWithFrame:self.tableView.frame];
view.backgroundColor = [UIColor redColor];
[self.tableView addSubview:view];
[self.tableView sendSubviewToBack:view];

[view setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.tableView addConstraint:[NSLayoutConstraint constraintWithItem:view
                                                                           attribute:NSLayoutAttributeTop
                                                                           relatedBy:NSLayoutRelationEqual
                                                                              toItem:self.tableView
                                                                           attribute:NSLayoutAttributeTop
                                                                          multiplier:1
                                                                            constant:0]];
                [self.tableView addConstraint:[NSLayoutConstraint constraintWithItem:view
                                                                           attribute:NSLayoutAttributeBottom
                                                                           relatedBy:NSLayoutRelationEqual
                                                                              toItem:self.tableView
                                                                           attribute:NSLayoutAttributeBottom
                                                                          multiplier:1
                                                                            constant:0]];
                [self.tableView addConstraint:[NSLayoutConstraint constraintWithItem:view
                                                                           attribute:NSLayoutAttributeLeading
                                                                           relatedBy:NSLayoutRelationEqual
                                                                              toItem:self.tableView
                                                                           attribute:NSLayoutAttributeLeading
                                                                          multiplier:1
                                                                            constant:0]];
                [self.tableView addConstraint:[NSLayoutConstraint constraintWithItem:view
                                                                           attribute:NSLayoutAttributeTrailing
                                                                           relatedBy:NSLayoutRelationEqual
                                                                              toItem:self.tableView
                                                                           attribute:NSLayoutAttributeTrailing
                                                                          multiplier:1
                                                                            constant:0]];

1 个答案:

答案 0 :(得分:0)

您应该将backgroundView属性用于表视图。只需使用alloc init创建视图(不需要框架或约束),并将该视图设置为表视图的背景视图,

    UIView *view = [[UIView alloc] init];
    view.backgroundColor = [UIColor redColor];
    self.tableView.backgroundView = view;

除非您的单元格清晰,否则在向下拉视图或将其滚动到底部之前,您将看不到此视图。