2013-04-10 51 views
1

我没有就这个话题很好的理解里面,所以请与我的iOS - 呈现一个UIViewController花药的UIViewController

承担我想显示另一个里面的UIViewController一个UIViewController。我觉得那里没有足够的例子。我已经阅读过文档,但是对于iOS来说相当新颖,我有点失落。

这是我的问题:我可以让孩子UIViewController出现在父UIViewController内但子视图不显示正确。

对不起,我还是不能发布图片。
这是我的孩子 - UIViewController
这是我的父母 - UIViewController。 (蓝色区域是子视图添加)

下面是结果:
蓝的UIView到位 - http://i.imgur.com/4vny8EZ.png

如果我在向右移动蓝色的UIView这里是什么情况
蓝的UIView移动到右侧 - http://i.imgur.com/XCOBwr6.png

我已经尝试了很多不同的东西,但我缺乏这方面的知识,真是使它发现难以走出什么是错的。

下面是我加载在我父母UIViewControllers类我的孩子的UIViewController:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Add Calculations View Controller 
    CalculationViewController *calculationController = [self.storyboard instantiateViewControllerWithIdentifier:@"Calculate"]; 
    [self addChildViewController:calculationController]; 
    calculationController.view.frame = self.calcualtionView.bounds; 

    [self.calcualtionView addSubview:calculationController.view]; 

} 

所以,我的问题是为什么会显示在古灵精怪的时尚子视图?
谢谢!

此外,对于链接,我只能发布两个。

回答

0

快速回答:视图尺寸不确定,直到viewWillAppear。在那里设置框架,它会工作。

较长的答案:

1)如果你使用的是iOS6的,我会鼓励你使用NSLayoutConstraints处理视图的大小和位置,而不是手动设置视图帧。需要一点时间才能真正包裹你的头,但是一旦你做了,它们比设置框架更加强大和灵活,你不必担心IBOutlets的创建时间和方式。

2)你是不要正确添加您的子视图控制器。您在添加视图后必须必须请致电didMoveToParentViewController:。使用缺少的代码行以及使用限制而不是框架,您的代码如下所示:

CalculationViewController *calculationController = 
       [self.storyboard instantiateViewControllerWithIdentifier:@"Calculate"]; 
calculationController.translatesAutoresizingMaskIntoConstraints = NO; 
[self addChildViewController:calculationController]; 
[self.calcualtionView addSubview:calculationController.view]; 
[calculationViewController didMoveToParentViewController:self]; 

// Add constraints for the view to fill calculationView 
UIView *calcView = calculationController.view; 
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(calcView); 
NSArray *hConstraint = 
     [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[calcView]|" 
               options:0 metrics:nil 
               views:viewsDictionary]; 
[self.calculationView addConstraints:hConstraint]; 
NSArray *vConstraint = 
     [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[calcView]|" 
               options:0 metrics:nil 
               views:viewsDictionary]; 
[self.calculationView addConstraints:vConstraint]; 
+0

非常感谢!我改变了这个答案,因为你提供了更多的细节。不知道这是否是这里的标准... – Archon 2013-04-10 17:15:45

+0

@Archon更改接受的答案是完美的,它是如此伟大 - 它的答案总是在不断完善和改进。 – memmons 2013-04-10 18:46:31

0

将代码移到viewDidAppear。如果calculateView是一个视图的IBOutlet,则其边界在viewDidLoad中将为零。在viewDidAppear之前,视图帧不会被设置。

+0

谢谢!这就是诀窍!只需要弄清楚为不同屏幕分辨率(iPhone4/S和iPhone 5)设计界面的最佳做法。 – Archon 2013-04-10 03:47:18

相关问题