ビュー (messageView) をメニュー項目 (messageViewMenu) に追加しようとしているので、メニュー項目がタップされたときに、この新しいビューがそのすぐ上に追加され、両方が画面を一緒に下にスライドします - Evernote 5.1 .2 にも似たようなものがあります。
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){}];