보통 UITableView
이 내 UIViewController
에 있으며 전체 화면으로 제한됩니다. 이 tableView에는 사용자 정의 상호 작용 tableHeaderView
이 있습니다. tableHeaderView는 크기면에서 동적이며 자체적으로 확장됩니다. headerView에는 textField가 있으며 textField에 포커스가 있는지 여부에 따라 자체 크기가 변경됩니다.UITableView의 애니메이션 중에 셀이 사라졌습니다.
tableHeaderView의 크기를 변경할 때 화면 맨 아래의 셀이 항상 올바르게 움직이는 것은 아닙니다. 내 애니메이션 블록 내에 layoutIfNeeded()
뒤에 tableView.beginUpdates()
및 tableView.endUpdates()
을 호출하려고합니다. 이 작업을 수행해야합니다. 그렇지 않으면 셀이 동적 크기를 전혀 따르지 않게됩니다.
나는이 gif를 만들었습니다. 애니메이션 중에 맨 아래의 셀을 자세히 살펴보십시오. 애니메이션을 상당히 느리게 만들었으므로 문제를 쉽게 볼 수 있습니다.
추측 다음있는 tableView 애니메이션이 시작 되 자마자 cellForRow:indexPath:
을 요구하고, 어떻게 든 전체를 tableView 애니메이션 이후에있을 것입니다 상태 무엇인지 찾아 내고, 불필요한 세포를 제거하는 것이 날 것으로 보인다, 애니메이션이 아직 완료되지 않은 경우에도 마찬가지입니다. 마찬가지로 헤더를 축소 할 때 : 맨 아래에있는 셀은 이미로드 된 셀과 같은 방식으로 움직이지 않습니다. 그들은 다른 애니메이션으로 움직입니다.
왜 이런 일이 발생합니까? 예방할 수 있습니까?
편집 :
self.navigationController?.setNavigationBarHidden(isEditing, animated: true)
var frame = tableHeaderView.frame
frame.size.height = tableHeaderView.headerHeight(forEditing: isEditing)
UIView.animate(withDuration: 0.3, animations: {
if isEditing{
let point = CGPoint(x: 0, y: -self.topLayoutGuide.length)
self.tableView.setContentOffset(point, animated: false)
}
tableHeaderView.frame = frame
tableHeaderView.layoutIfNeeded()
self.view.layoutIfNeeded()
self.tableView.beginUpdates()
self.tableView.endUpdates()
}) { [weak self](completed:Bool) in
//Do stuff
}
코드를 표시 할 수 있습니까? – jalone
스토리 보드에서 - 장면 선택 -> 속성 검사기 표시 -> 상단 막대 아래에서 상단 표시 줄 아래에서 해제하십시오. – Pavankumar
@Sti : 일부 코드를 사용해야합니다. – Poles