1

我对这个话题不是很了解,所以请多多包涵

我试图在另一个 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];

}

所以,我的问题是为什么它以一种奇怪的方式显示子视图?
谢谢!

另外,对不起,我只能发布两个链接。

4

2 回答 2

0

将代码移动到 viewDidAppear。如果calculationView 是一个视图的IBOutlet,它的边界在viewDidLoad 中将为零。直到 viewDidAppear 才设置视图框架。

于 2013-04-10T03:07:31.433 回答
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];
于 2013-04-10T04:36:27.150 回答