질문 모듈에서 사용자가 tableview로 표시되는 답변을 클릭 할 때 UIView의 크기를 조절하고 애니메이션을 적용해야합니다. 나는 몇몇 관련 질문을 읽고 그들의 해결책을 적용했다 그러나 그들 중 누구도 나를 위해 일하지 않았다.크기가 조정되는 동안 애니메이션이 예상대로 작동하지 않습니다.
처음보기에는 uiview가 표시되지 않지만 사용자가 동일한 답변을 2 회 이상 클릭하면 동일한 답변의 두 번째 클릭으로 프레임이 변경되지 않기 때문에 나타납니다.
기본적으로 답변 변경의 피드백, uiview의 높이를 다시 계산하면 애니메이션을 차단하고있는 것 같습니다.
내 뷰 계층 : 뷰와 텍스트 뷰의 제약을 변경 http://i.imgur.com/Oho6Hob.png
방법 :
self.feedbackLabelWrapperHeight.constant = height + 45;
self.feedbackViewHeight.constant = height + 45 + 12;
int y = height;
[self.feedbackView setFrame:CGRectMake(50,self.scrollView.frame.size.height + self.scrollView.frame.origin.y -(y+40),self.feedbackView.frame.size.width,(y+40))];
애니메이션 방법 :
[UIView beginAnimations:@"feedback" context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.2];
[UIView setAnimationDelay:delay];
[self.view layoutIfNeeded];
[UIView commitAnimations];
self.isFeedbackViewVisiable = YES;
내가 didSelectRowAtIndexPath에서이 두 가지 방법을 전화 드렸습니다 메서드를 다음 순서로 사용합니다. 및 labelHeightOfResponse 매개 변수는 계산 된 높이입니다. 관련 라벨 또는 텍스트 뷰
[self setFeedbackConstraintHeight:labelHeightOfResponse];
[self feedbackViewAppearAnimationWithDelay:0.2 yPosition:labelHeightOfResponse];
정말 도움이 될만한 정보가 여기 있습니다. 감사합니다.
계산 된 위치와보기의 크기가 로그에서 올바르게 보입니다. –
애니메이션 내부에 새 프레임의 계산을 설정해보십시오. 따라서 layoutIfNeeded를 호출하지 않고 – Jasper
이 제안을 시도했지만 불행히도 그 중 하나도 작동하지 않았습니다. @ 재스퍼 폴 –