我想添加一個視圖(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){}];
輝煌。感謝你,如你所說,我應該在動畫之前調用layoutSubViews。非常感激。史蒂夫 – Steve