2013-02-04 69 views
1

我想添加一個視圖(messageView)到我的菜單項(messageViewMenu),以便當菜單項被點擊時,這個新的視圖被添加到它的上面,他們都滑動屏幕一個接着一個 - Evernote 5.1.2有類似的東西。使用NSLayoutConstraints添加簡單的動畫添加子視圖

我正在使用NSLayoutConstraint將新視圖附加到我認爲是菜單項的頂部。然後,將菜單項的現有垂直約束設置爲一個標題UIView(_headerMessageConstraint),以使其增大到300.我期望新視圖以垂直方式附加到它的尾部邊緣到菜單項的前沿,並沿着屏幕向下滑動一起。

但是,新視圖會隨着菜單項滑落,然後繼續移動,直到看起來頂部邊緣對齊。

任何人都可以告訴我哪裏出錯了嗎? 在此先感謝您的幫助

史蒂夫

編輯。由於我發佈了這個,我已經瞭解到,當我添加新視圖(MessageViewController的mvc.view)時,它默認放置在0,0。我不希望它在0,0,但它看起來像我必須在我想要它出現的位置設置一個框架 - 這在使用自動佈局時似乎是錯誤的 - 或者將此新視圖添加到子視圖並激活子視圖的高度,也許......雖然我可能會在這裏把自己說成一個黑暗的地方。

MessageViewController *mvc = [[MessageViewController alloc] init]; 
[mvc.view setTranslatesAutoresizingMaskIntoConstraints:NO]; 
UIView *messageView = mvc.view; 
[self.view addSubview:messageView]; 

UIView *messageViewMenu = self.messageViewMenu; 

NSDictionary* views = NSDictionaryOfVariableBindings(messageViewMenu, messageView); 

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[messageView]|" 
                    options:0 
                    metrics:nil 
                    views:views]]; 

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[messageView(200)]-[messageViewMenu]" 
                    options:0 
                    metrics:nil 
                    views:views]]; 
[self.view layoutSubviews]; // UPDATE - THIS IS THE CODE THAT WAS MISSING - IT DISPLAYS THE SUBVIEWS BEFORE THE ANIMATION STARTS. THANKS @RDELMAR 

[UIView animateWithDuration:0.9 animations:^{ 
         _headerMessageConstraint.constant = 200; 
         [self.view layoutIfNeeded]; 
         } completion:^(BOOL finished){}]; 

回答

3

我不知道你想要做什麼,但你需要添加略高於你的動畫塊行[self.view layoutSubviews。主視圖需要在動畫之前將新視圖佈置在起始位置。

如果您希望2個視圖彼此之間沒有空間,您還需要在「V:[messageView(200)] - [messageViewMenu]」中取出短劃線。

+0

輝煌。感謝你,如你所說,我應該在動畫之前調用layoutSubViews。非常感激。史蒂夫 – Steve