嵌入视图并调整其大小

Posted

技术标签:

【中文标题】嵌入视图并调整其大小【英文标题】:Embedded a view and resize it 【发布时间】:2015-12-04 16:03:23 【问题描述】:

我遇到了嵌入视图和自动布局的问题。

我创建了一个视图,它有点复杂。所以现在 我想重构这个视图并创建一些视图组件。我得到了其中一个视图,并将它们放在一个 uiview 类中,并将其所有逻辑都放在那里。让我们将此视图称为 XView。到现在为止。

所以我尝试将 XView 嵌入到主视图中,以查看该视图及其新组件的工作原理。我把这个命令:

xViewInstance = ...
[self.container addSubview:xViewInstance];

它不起作用。 xViewInstance 比父视图大。我想调整 xViewInstance 的大小。

所以我用谷歌搜索了答案,看看出了什么问题。我找到了一些可以帮助我的答案。我找到了 PureLayout。

所以我尝试了它。

- (void)updateViewConstraints 

    if (!self.didSetupConstraints) 

        [self.xViewInstance autoPinEdgesToSuperviewEdges];

        self.didSetupConstraints = true;
    
    [super updateViewConstraints];

没有用。 xViewInstance 继续大于其父级。

我在堆栈中找到了另一个答案,一个在代码中创建约束的代码,以编程方式调整子视图。还是不行。

现在我不知道会发生什么。我认为这可能是 xViewInstance 约束的一些优先级。

有没有人因这种情况而通过?如果有人能就此提供一些建议,我将不胜感激。

【问题讨论】:

【参考方案1】:

相信这篇文章会解决你的问题:

Use autolayout to set dynamic UIView to match container view

我是这样测试的,它确实有效:

- (void)viewDidLoad 
    [super viewDidLoad];

    // Init with a huge frame to see if it resizes.
    xView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1024, 800)];
    xView.translatesAutoresizingMaskIntoConstraints = NO;
    xView.backgroundColor = [UIColor redColor];

    [containerView addSubview:xView];
    [self addConstraints];


- (void)addConstraints

    [containerView addConstraint:[NSLayoutConstraint constraintWithItem:xView
                                                              attribute:NSLayoutAttributeTop
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:containerView
                                                              attribute:NSLayoutAttributeTop
                                                             multiplier:1.0
                                                               constant:0.0]];

    [containerView addConstraint:[NSLayoutConstraint constraintWithItem:xView
                                                              attribute:NSLayoutAttributeLeading
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:containerView
                                                              attribute:NSLayoutAttributeLeading
                                                             multiplier:1.0
                                                               constant:0.0]];

    [containerView addConstraint:[NSLayoutConstraint constraintWithItem:xView
                                                              attribute:NSLayoutAttributeBottom
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:containerView
                                                              attribute:NSLayoutAttributeBottom
                                                             multiplier:1.0
                                                               constant:0.0]];

    [containerView addConstraint:[NSLayoutConstraint constraintWithItem:xView
                                                              attribute:NSLayoutAttributeTrailing
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:containerView
                                                              attribute:NSLayoutAttributeTrailing
                                                             multiplier:1.0
                                                               constant:0.0]];

Wg

【讨论】:

实际上是我在问题中提到的这段代码。它不适用于我的情况。 > 我在堆栈中找到了另一个答案,一个在代码中创建约束的代码,以编程方式调整子视图。还是不行。 视图中的子视图是否存在可能导致其无法调整大小的约束?内容拥抱和抗压缩优先级如何? 也许吧。我试图消除所有约束并对其进行测试。它没有用。 您是否以编程方式创建了视图?如果没有,你能附上它的笔尖吗? 视图是用 nib 格式创建的,然后我分配它,并将它附加到容器视图中。

以上是关于嵌入视图并调整其大小的主要内容,如果未能解决你的问题,请参考以下文章

调整UIViewController的大小以导出其视图

如何调整滚动视图内容的大小并根据其文本大小将文本视图放入其中? [复制]

如何调整 UIView 的大小并强制其子视图调整大小

如何使用自动调整大小和自动布局并更改其默认行为? [关闭]

如何在编辑模式下将子视图添加到 UITableViewCell 并调整其大小?

如何调整标签大小以适应任何屏幕尺寸