【问题标题】:UITableView and AutoLayout - no table shownUITableView 和 AutoLayout - 没有显示表格
【发布时间】: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);。我怀疑它会为零。

标签: ios objective-c uitableview autolayout


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

  • 我不太明白你的回答,为什么当我设置 self.tableviw.translatesAutoResizingMaskIntoConstraints = NO 时系统不显示 uitableview;
  • 这不是这个问题的目的。他将视图控制器的主视图设置为自动布局,这通常是不正确的。如果您有不同的设置,请提出不同的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多