gpt4 book ai didi

ios - AutoLayout 和 ChildViewControllers 问题(ChildVC View 的大小不正确)

转载 作者:可可西里 更新时间:2023-11-01 04:05:06 25 4
gpt4 key购买 nike

我在做一件相当简单的事情时遇到了一些困难,我遗漏了一些东西但没有看到......

我用一个非常简单的应用程序(使用 IB)重现了这个问题:

  • 应用的主要 ViewController 是一个 UINavigationController。
  • NavigationController 的根是“FirstViewController”。
  • FirstViewController 和 SecondViewController 是空的 UIViewController 子类。
    • 他们的 XIB 文件在创建类时由 XCode 生成,AutoLayout 已启用。
    • 我在 SecondViewController 的顶部和底部放置了标签(垂直空间约束 = 0)。

使用 ChildViewControllers

问题是如果我通过“ChildViewControllers”方法显示 SecondViewController,它在我的 iPhone4 上会出错:我没有看到底部标签。

// In FirstViewController.m
- (IBAction)child:(id)sender {
[self addChildViewController:self.secondVC];
[self.view addSubview:self.secondVC.view];
[self.secondVC didMoveToParentViewController:self];
}

使用导航 Controller

如果我通过 NavigationController 显示“SecondViewController”,一切正常,SecondViewController 显示正确。

// In FirstViewController.m
- (IBAction)push:(id)sender {
[self.navigationController pushViewController:self.secondVC animated:YES];
}

另外,只要通过 NavigationController 显示过一次 SecondViewController,它就会始终显示良好。

我肯定错过了什么,但是什么? :p你有什么想法吗?

我在 dropbox 上上传了简单的项目:https://dl.dropbox.com/u/36803737/sharebox/AutoLayoutTest.zip

谢谢!

朱利安

最佳答案

您的保管箱链接无效,所以我无法尝试。在将其添加为 subview 之前尝试设置 secondVC 的框架:

secondVC.view.frame = self.view.bounds;

如果你想用约束来做,我这样做:

- (IBAction)child:(id)sender {
[self addChildViewController:self.secondVC];
[self.view addSubview:self.secondVC.view];
[self constrainViewEqual:secondVC.view];
[self.secondVC didMoveToParentViewController:self];
}

-(void)constrainViewEqual:(UIView *) view {
[view setTranslatesAutoresizingMaskIntoConstraints:NO];
NSLayoutConstraint *con1 = [NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeCenterX relatedBy:0 toItem:view attribute:NSLayoutAttributeCenterX multiplier:1 constant:0];
NSLayoutConstraint *con2 = [NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeCenterY relatedBy:0 toItem:view attribute:NSLayoutAttributeCenterY multiplier:1 constant:0];
NSLayoutConstraint *con3 = [NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeWidth relatedBy:0 toItem:view attribute:NSLayoutAttributeWidth multiplier:1 constant:0];
NSLayoutConstraint *con4 = [NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeHeight relatedBy:0 toItem:view attribute:NSLayoutAttributeHeight multiplier:1 constant:0];
NSArray *constraints = @[con1,con2,con3,con4];
[self.view addConstraints:constraints];
}

由于我经常使用约束,所以我在 UIView 的一个类别中使用了上述方法(和其他方法)来使我的代码看起来更清晰。

关于ios - AutoLayout 和 ChildViewControllers 问题(ChildVC View 的大小不正确),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14173523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com