iOS Autolayout如何在superview中拉伸子视图

Posted

技术标签:

【中文标题】iOS Autolayout如何在superview中拉伸子视图【英文标题】:iOS Autolayout how to stretch out subview in superview 【发布时间】:2015-01-13 10:57:47 【问题描述】:

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

我的问题是如何将所有边固定到超级视图边界。因为现在我只能看到RootViewController 视图的一部分。

在情节提要中,我已将所有约束设置为灰色容器视图和UINavigationControllerRootViewController 视图。如果我通常 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 视图设置为与灰色容器相同的宽度和高度:

- (void)viewDidLoad

    [super viewDidLoad];

    CGRect rect = self.theContainerView.frame;
    rect.origin.x = 0;
    rect.origin.y = 0;

    [self.theNavigationController.view setFrame:rect];

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

然后它工作正常。但我认为如果我们不只修改一个框架,那么它会起作用吗?

【问题讨论】:

【参考方案1】:

有两种方法。

一种方法是在viewDidLayoutSubview方法中调用addSubView代码

第二种方法是使用以下代码设置框架

[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];
);

【讨论】:

以上是关于iOS Autolayout如何在superview中拉伸子视图的主要内容,如果未能解决你的问题,请参考以下文章

IOS/Autolayout:如何修复大文本视图的宽度?

IOS / Autolayout:如何修复大文本视图的宽度?

iOS Autolayout如何在superview中拉伸子视图

如何使用AutoLayout(iOS / Xamarin.iOS)使ScrollView适合其内容?

如何使用 AutoLayout (iOS/Xamarin.iOS) 使 ScrollView 适合其内容?

在iOS中使用autolayout调整内容大小的UILabel