Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c UIViewController viewDidLoad_Objective C_Ios_Uiviewcontroller_Ios6_Autolayout - Fatal编程技术网

Objective c UIViewController viewDidLoad

Objective c UIViewController viewDidLoad,objective-c,ios,uiviewcontroller,ios6,autolayout,Objective C,Ios,Uiviewcontroller,Ios6,Autolayout,我有一个新项目,可以使用iOS 5+功能,所以我选择同时使用AutoLayout和UIViewControllerchildControllers功能 我尝试创建的屏幕很简单: 1.顶部区域有许多“复杂”控件。 2.底部区域是用于可视化结果的tableview 我想要什么 我希望控件区域占据所有必要的位置(即我在Interface Builder中提供的位置)。TableView将根据需要缩小 问题 从XIB加载时,UIViewController.view帧的大小始终为0x568。我应该是0x

我有一个新项目,可以使用iOS 5+功能,所以我选择同时使用
AutoLayout
和UIViewController
childControllers
功能

我尝试创建的屏幕很简单: 1.顶部区域有许多“复杂”控件。 2.底部区域是用于可视化结果的tableview

我想要什么

我希望控件区域占据所有必要的位置(即我在Interface Builder中提供的位置)。TableView将根据需要缩小

问题

从XIB加载时,
UIViewController.view
帧的大小始终为0x568。我应该是0x200(如果200是我在Interface Builder中配置的大小)

工作原理:使用
自动布局

我用我所有的元素创建了一个XIB。我在“根视图”上创建了outlet,并创建了outlet和所有视图容器

然后在viewDidLoad方法中添加了容器和配置的约束

-(无效)设置约束
{
NSMutableArray*约束=[NSMutableArray阵列容量:1];
//查看字典。
UIView*topView=self.topView;
UIView*table=self.tableTracks;
NSDictionary*视图=NSDictionaryOfVariableBindings(topView,表);
//查看度量。
NSNumber*topViewHeight=[NSNumber numberWithFloat:self.topView.frame.size.height];
NSDictionary*metrics=NSDictionaryOfVariableBindings(topViewHeight);
//将俯视图固定到容器的上边缘。
[constraints addObjectsFromArray:[NSLayoutConstraints WithVisualFormat:@“V:|[topView(=topViewHeight)][table]|“选项:0度量:度量视图:视图];
//将俯视图边缘固定到容器的两侧。
[constraints-addObjectsFromArray:[NSLayoutConstraints-WithVisualFormat:@“H:|[topView]|”选项:0指标:零视图:视图];
//将桌子边缘固定到容器的两侧。
[constraints-addObjectsFromArray:[NSLayoutConstraints-WithVisualFormat:@“H:|[table]|”选项:0指标:零视图:视图];
[self.view addConstraints:constraints];
}
有了它,我可以使用Interface Builder简单地调整
topView
视图的大小,并且
TableView
将根据需要调整大小(无压缩阻力,我不在乎是否看不到表)

什么不起作用:使用
AutoLayout
ChildControllers

然后为了简单起见,我选择使用
ChildControllers
(执行自定义UIFont设置需要很多插座,太糟糕了,XCode还不能处理它们!)。 我做了以下修改:

  • 已创建HomeTopViewController类+XIB。已创建HomeTableViewController类+XIB
  • 将所有视图从原点复制到正确的XIB。添加UIViewController引用并连接插座
  • HomeTopViewController
    的根容器配置为200px高度
  • 将我的容器连接到我孩子控制器的
    视图
    出口
  • 然后,我将设置代码更新为以下内容:

    -(void)\u添加ChildViewControllers和SetupConstraints{
    //获取所需的度量变量
    NSNumber*topViewHeight=[NSNumber numberWithFloat:self.topViewController.view.frame.size.height];
    CFShow(self.topViewController.view);
    //日志为:
    NSLog(@“self.topViewController.view.frame.size.height=%f”,self.topViewController.view.frame.size.height);
    //通知控制器添加操作已启动
    [self addChildViewController:self.topViewController];
    [self-addChildViewController:self.tableViewController];
    //将视图添加到视图的层次结构中
    self.topViewController.view.Translates自动调整大小GMaskintoConstraints=否;
    self.tableViewController.view.translates自动调整大小gmaskintoconstraints=否;
    [self.view addSubview:self.topViewController.view];
    [self.view addSubview:self.tableViewController.view];
    //设置约束
    NSMutableArray*约束=[NSMutableArray阵列容量:1];
    //视图词典
    UIView*topView=self.topViewController.view;
    UIView*table=self.tableViewController.view;
    NSDictionary*视图=NSDictionaryOfVariableBindings(topView,表);
    //查看度量字典
    NSDictionary*metrics=NSDictionaryOfVariableBindings(topViewHeight);
    //将俯视图固定到容器的上边缘。
    [constraints addObjectsFromArray:[NSLayoutConstraints WithVisualFormat:@“V:|[topView(=topViewHeight)][table]|“选项:0度量:度量视图:视图];
    //将俯视图边缘固定到容器的两侧。
    [constraints-addObjectsFromArray:[NSLayoutConstraints-WithVisualFormat:@“H:|[topView]|”选项:0指标:零视图:视图];
    //将桌子边缘固定到容器的两侧。
    [constraints-addObjectsFromArray:[NSLayoutConstraints-WithVisualFormat:@“H:|[table]|”选项:0指标:零视图:视图];
    //添加约束
    [self.view addConstraints:constraints];
    //通知控制器添加操作已结束
    [self.topViewController didMoveToParentViewController:self];
    [self.tableViewController didMoveToParentViewController:self];
    }
    
    问题

    无论我在
    HomeTopViewController
    CFShow(self.topViewController.view)中如何调整UIView容器的大小总是给我
    帧=(0 0;320 568)

    我确实将布局大小配置为“自由形式”或“无”

    我想尽量避免的事情

    我讨厌在
    HomeTopViewController
    HomeTableViewController
    上创建其他插座,然后将初始帧/高度存储到UIViewController属性中

    问题

  • 借调