我在代码中创建了一个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
编辑2:如果删除我在viewDidLoad中也有的self.view.translatesAutoResizingMaskIntoConstraints = NO;
,一切似乎都没问题 - 为什么不允许这样做?
答案 0 :(得分:2)
如果删除self.view.translatesAutoResizingMaskIntoConstraints = NO,一切似乎都没问题;我在viewDidLoad中也有这个 - 为什么不允许?
我很高兴你找到了答案 - 这是给你的解释。
对于由系统管理的视图控制器视图,包括但不限于:
您不想启用自动布局。在这些情况下,view
的大小和位置不由视图控制器决定,并且您不知道包含对象如何调整视图大小。如果要使用autolayout,它将关闭自动调整掩码转换属性本身。
您唯一一次将视图控制器的视图设置为自动布局视图,如果您将其用作另一个视图控制器中的子视图控制器,并且您希望使用约束来调整子视图控制器视图的大小和位置。即使在这种情况下,您可能不会在视图控制器中设置属性,但让父级执行此操作。
您无需为层次结构中的每个视图启用自动布局。 Autolayout视图可以在“遗留布局”视图中非常愉快地生活。