1

我正在代码中创建一个 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表格,就会显示......我错过了什么?

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

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

4

1 回答 1

2

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

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

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

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

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

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

您不需要为层次结构中的每个视图打开自动布局。自动布局视图可以在“旧版布局”视图中非常愉快地存在。

于 2013-09-17T15:10:22.293 回答