2015-12-04 71 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

也許吧。我試圖拿出所有的約束並測試它。它沒有工作。 –

相關問題