UITableView和AutoLayout - 没有显示表格

时间:2013-09-16 06:37:37

标签: ios objective-c uitableview autolayout

我在代码中创建了一个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;,一切似乎都没问题 - 为什么不允许这样做?

1 个答案:

答案 0 :(得分:2)

  

如果删除self.view.translatesAutoResizingMaskIntoConstraints = NO,一切似乎都没问题;我在viewDidLoad中也有这个 - 为什么不允许?

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

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

  • 窗口的根视图控制器
  • 推入导航控制器的视图控制器
  • 标签栏控制器中的一个选项

您不想启用自动布局。在这些情况下,view的大小和位置不由视图控制器决定,并且您不知道包含对象如何调整视图大小。如果要使用autolayout,它将关闭自动调整掩码转换属性本身。

您唯一一次将视图控制器的视图设置为自动布局视图,如果您将其用作另一个视图控制器中的子视图控制器,并且您希望使用约束来调整子视图控制器视图的大小和位置。即使在这种情况下,您可能不会在视图控制器中设置属性,但让父级执行此操作。

您无需为层次结构中的每个视图启用自动布局。 Autolayout视图可以在“遗留布局”视图中非常愉快地生活。