对于我的简单问题,我祸害了所有的Autolayout问题:
我在UINavigationController中显示了一个UIViewController。那个UIViewController里面有一个UITableViewController。这是代码:
FirstViewController:
- (void)viewDidLoad
{
[super viewDidLoad];
UIView *contentView = [UIView new];
contentView.translatesAutoresizingMaskIntoConstraints = NO;
self.view = contentView;
[self.view setBackgroundColor:[UIColor redColor]];
firstTable=[[FirstTableViewController alloc] initWithStyle:UITableViewStylePlain];
[self.view addSubview:firstTable.tableView];
}
现在,当我运行时,我在FirstViewController的顶部和tableViewController(其中没有位置代码)之间存在差距。
所以使用viewDidLayoutSubviews方法我尝试了各种约束
-(void) viewDidLayoutSubviews
{
[firstTable.tableView layoutIfNeeded];
//[firstTable.tableView pinEdge:NSLayoutAttributeTop toEdge:NSLayoutAttributeTop ofView:self.view inset:0.0];
// CRASHES
[firstTable.tableView addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:0.0]];
// CRASHES: A constraint cannot be made that sets a location equal to a constant. Location attributes must be specified in pairs'
}
我上面尝试过几种不同的方法
我只想将tableView的顶部与ViewController的视图相匹配。设置框架的问题是我遇到了全屏视图(视频播放器)的问题,推迟了这个差距。
如何匹配此tableViewController的顶部以消除此差距?以编程方式,NOt使用IB使用iOS 7 Autolayout功能请!
解决方案
Sir Lord Stack Master @jrturton指出了我正在考虑的方向,一般来说上面的结构就是问题所在。我将尝试他的一般指针,但我认为它是一个结构问题,并将委托和数据源功能从原始VC中移出并将其带入UITableViewController,这就是它的用途!
答案 0 :(得分:2)
self.view
中设置viewDidLoad
是......奇怪的。调用该方法时,已经设置了self.view。 self.view = [UIView new];
中执行loadView
。 translatesAutoresizingMaskIntoConstraints
设置为NO
。 viewDidLayoutSubviews
不是创建约束的好地方。添加子视图时应添加固定约束,因此您应该在loadView
中执行所有操作 - 一旦您按照上述建议操作,只需将表视图固定到顶部,左侧和右侧边缘(并设置)一个高度,如果它没有完全向下,否则也会固定到底部,但如果你这样做,我不知道为什么它是一个子视图控制器)。