UITableView 和 AutoLayout - 没有显示表格

Posted

技术标签:

【中文标题】UITableView 和 AutoLayout - 没有显示表格【英文标题】:UITableView and AutoLayout - no table shown 【发布时间】:2013-09-16 06:37:36 【问题描述】:

我正在代码中创建一个 UITableView,我想设置带有约束的大小 - 但没有显示 tableView:

_tableView = [[UITableView alloc] initWithFrame:CGRectZero];
_tableView.translatesAutoresizingMaskIntoConstraints = NO;
_tableView.autoresizingMask = UIViewAutoresizingNone;
_tableView.delegate = self;
_tableView.dataSource = self;
[self.view addSubview:_tableView];

NSDictionary *views = @ @"tableView": self.tableView;
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[tableView]-10-|" options:0 metrics:nil views:views]];
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[tableView]-10-|" options:0 metrics:nil views:views]];

[self.view removeConstraints:self.view.constraints];
[self.view addConstraints:constraints];

只有没有约束,如果我使用initWithFrame:self.view.bounds,表格就会显示出来......我错过了什么?

编辑:如果我使用 self.view.bounds 初始化 tableView 将无济于事

编辑 2: 如果我删除我在 viewDidLoad 中也有的 self.view.translatesAutoResizingMaskIntoConstraints = NO;,一切似乎都很好 - 为什么不允许这样做?

【问题讨论】:

尝试初始化tableView Like : [UITableView alloc] init]; 不会改变任何东西 :( 讨论 - 矩形被标准化,然后应用插入参数。如果生成的矩形的高度或宽度为负,则返回一个空矩形。 [self.view addSubview:_tableView];将 nil 框架添加到视图中。那有什么用呢..? 你在实例化数组constraints吗?从代码中,数组将为 nil。即在添加约束后放置NSLog(@"%@", constraints);。我怀疑它会为零。 【参考方案1】:

如果我删除 self.view.translatesAutoResizingMaskIntoConstraints = NO; 似乎一切都很好我的 viewDidLoad 中也有 - 为什么不允许这样做?

很高兴您找到了答案 - 这是给您的解释。

对于由系统管理的视图控制器视图,包括但不限于:

窗口的根视图控制器 将视图控制器推送到导航控制器上 标签栏控制器中的选项之一

您不想打开自动布局。在这些情况下,view 的大小和位置不能由视图控制器决定,并且您不知道包含对象如何调整视图的大小。如果它想使用自动布局,它会关闭 autoresizing mask 翻译属性。

您将视图控制器的视图设置为自动布局视图的唯一情况是,您将其用作另一个视图控制器中的子视图控制器,并且您想使用约束来调整子视图控制器的视图大小和位置。即使在这种情况下,您也可能不会在视图控制器中设置属性,而是让父级来完成。

您无需为层次结构中的每个视图都启用自动布局。自动布局视图可以在“旧版布局”视图中非常愉快地存在。

【讨论】:

我不太明白你的回答,为什么当我设置 self.tableviw.translatesAutoResizingMaskIntoConstraints = NO 时系统不显示 uitableview; 这不是这个问题的目的。他将视图控制器的主视图设置为自动布局,这通常是不正确的。如果您有不同的设置,请提出不同的问题。

以上是关于UITableView 和 AutoLayout - 没有显示表格的主要内容,如果未能解决你的问题,请参考以下文章

包含 UITableView 的 UITableViewCell 的高度(iOS8 和 AutoLayout)

如何使用 AutoLayout 使 UITableView 适合屏幕

使用 Autolayout 在 UITableView 中异步加载图像

如何使用 Autolayout 调整 UITableView 的大小?

使用 AutoLayout addSubview 到 UITableView 后崩溃

添加到父视图时向 UITableView 添加 AutoLayout 约束