Ios7 在UIViewController中使用UITableViewController进行编程自动布局

Ios7 在UIViewController中使用UITableViewController进行编程自动布局,ios7,autolayout,nslayoutconstraint,Ios7,Autolayout,Nslayoutconstraint,对于我的简单问题,我遇到了所有的自动布局问题: 我在UINavigationController中显示了UIViewController。该UIViewController中有一个UITableViewController。代码如下: FirstViewController: - (void)viewDidLoad { [super viewDidLoad]; UIView *contentView = [UIView new]; contentView.translat

对于我的简单问题,我遇到了所有的自动布局问题:

我在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的顶部以消除此间隙?以编程方式,请不要使用iOS 7自动布局功能的IB

解决方案

洛德·高堆叠大师@jrturton爵士为我指出了一个我正在考虑的方向,总的来说,上面的结构就是问题所在。我将尝试他的一般指针,但我认为这是一个结构性问题,并将委托和数据源功能移出原始VC,并将其引入UITababVIEW控制器,这就是它被用作的原因。p>
  • viewDidLoad
    中设置
    self.view
    。。。古怪的调用该方法时,self.view已设置
  • 视图控制器的主视图属性不需要对其自动调整大小的遮罩进行任何操作。如果我手动构建视图,我通常只做
    self.view=[UIView new]
    loadView
  • 如果要添加子视图控制器,请确保将其添加为子视图控制器,而不仅仅是添加视图
  • 如果要使用自动布局布局子视图控制器,则需要在子视图控制器的视图上将
    translatesAutoResizengMackintoConstraints
    设置为
    NO
  • viewdilayoutsubviews
    不是创建约束的好地方。添加子视图时应添加固定约束,因此您可能应该在
    loadView
    中执行所有操作-遵循上述建议后,只需将表格视图固定到顶部、左侧和右侧边缘即可(如果它不能一直向下,请设置一个高度,否则也要固定到底部,但如果这样做,我不知道为什么它是子视图控制器)

  • 谢谢,伙计,我不知道你在3中的意思。你的意思是只是实例化VC还是VC添加了那个视图?我有点脱离了上面的一般结构,因为原始VC的视图功能被删除了,所以我只是在NavigationController中显示UITableViewController。在3中,我的意思是你必须调用
    addChildViewController
    以及
    添加子视图
    ,以便正确传递旋转和其他事件。