2015-12-04 69 views
0

我遇到了嵌入视图和自动布局的问题。嵌入视图并调整其大小

我创建了一个有点复杂的视图。所以现在 我想重构这个视图并创建一些视图组件。我得到了其中的一种观点,并将其整合到一个观点类中,并将其所有逻辑放在那里。让我们把这个视图称为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约束的一些优先级。

有人因为这种情况而过世了吗?如果有人能就此提出一些建议,我将非常感激。

回答

0

我相信这个帖子会解决你的问题:

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

+0

其实是这样的代码,我提到的我的问题。它不适用于我的情况。 >我在堆栈中找到了另一个答案,这是一个在代码中创建约束的代码,以编程方式调整子视图。它再次没有工作。 –

+0

视图中的子视图是否有可能导致其不能调整大小的约束?内容拥抱和压缩阻力优先级如何? – Wizgod

+0

也许吧。我试图拿出所有的约束并测试它。它没有工作。 –

相关问题