iOS Autolayout如何在superview中展开子视图

时间:2015-01-13 10:57:47

标签: ios xcode6 autolayout nsautolayout ios-autolayout

enter image description here

正如您在屏幕截图中看到的那样,我将灰色UIView用作容器。在代码中,我分配了UINavigationController并将其视图作为子视图添加到灰色容器视图中。 UINavigationControllerRootViewController(你可以看到左侧的截断表视图 - 它是我的UINavigationController的根视图控制器)。

我的问题是如何将所有方面都固定在超视图范围内。因为现在我只能看到RootViewController视图的一部分。

在故事板中,我为RootViewController的{​​{1}}视图设置了灰色容器视图的所有约束。如果我通常UINavigationController而不是添加为子视图,则会显示没有中断问题。

以下是PushViewController中包含灰色容器视图的代码:

UIViewController

以下是灰色容器视图的约束

enter image description here

这是根视图控制器视图的约束,它已经切断了表:

enter image description here

似乎一个简单的解决方案是将- (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if (self) { KNCouponsViewController *couponsViewControllerByList = [KNInstantiateHelper instantiateViewControllerWithIdentifier:@"KNCouponsViewController"]; self.theNavigationController = [[UINavigationController alloc] initWithRootViewController:couponsViewControllerByList]; } return self; } - (void)viewDidLoad { [super viewDidLoad]; [self.theContainerView addSubview:self.theNavigationController.view]; } 视图设置为与灰色容器相同的宽度和高度:

UINavigationController

然后它的工作正确。但我认为如果我们不修改框架那么它会起作用吗?

1 个答案:

答案 0 :(得分:0)

有两种方式。

  • 1种方法是在addSubView方法
  • 中调用viewDidLayoutSubview代码
  • 第二种方法是使用以下代码设置框架

    [self.theContainerView addSubview:self.theNavigationController.view]; [self.theNavigationController.view setFrame:self.theContainerView.frame];

注意:如果您使用第一种方式,请在

中添加您的代码
static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{
[self.theContainerView addSubview:self.theNavigationController.view];
[self.containerView layoutIfNeeded];
});