正如您在屏幕截图中看到的那样,我将灰色UIView
用作容器。在代码中,我分配了UINavigationController
并将其视图作为子视图添加到灰色容器视图中。 UINavigationController
有RootViewController
(你可以看到左侧的截断表视图 - 它是我的UINavigationController的根视图控制器)。
我的问题是如何将所有方面都固定在超视图范围内。因为现在我只能看到RootViewController
视图的一部分。
在故事板中,我为RootViewController
的{{1}}视图设置了灰色容器视图的所有约束。如果我通常UINavigationController
而不是添加为子视图,则会显示没有中断问题。
以下是PushViewController
中包含灰色容器视图的代码:
UIViewController
以下是灰色容器视图的约束
这是根视图控制器视图的约束,它已经切断了表:
似乎一个简单的解决方案是将- (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
然后它的工作正确。但我认为如果我们不修改框架那么它会起作用吗?
答案 0 :(得分:0)
有两种方式。
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];
});