UICollectionViewDiffableDataSource 정보 ChatLayout MessageKit에 대한 대체 솔루션입니다. Custom UICollectionViewLayout 사용하여 프레젠테이션 및 UICollectionView 에서 사용 가능한 모든 도구를 완전히 제어 할 수 있습니다.
UICollectionView 의 상단 또는 하단에 마지막 보이는 항목의 내용을 유지합니다. ChatLayout 은 사용자 정의 UICollectionViewLayout 입니다.
사용자 정의 UIViewController 또는 UICollectionView 를 확장하거나 재정의 할 필요가 없습니다. 당신은 그들 자신을 스스로 인스턴스화하고 원하는대로 사용해야합니다.
ChatLayout 수정 된 UICollectionViewFlowLayout 에 의존하지 않으며 UICollectionView 거꾸로 회전하지 않습니다. 즉, 뷰를 UICollectionView 내에서 일반 셀 인 것처럼 사용할 수 있습니다. View Controller는 해킹이나 트릭이없는 일반보기 컨트롤러이기 때문에 adjustedContextInsets (및 기타)의 기본 UIKit 구현을 사용하면 혜택을 볼 수 있습니다.
ChatLayout 화면에서 셀 크기를 렌더링하기 전에 모든 셀 크기를 계산할 필요가 없습니다. 자동 층 제약 조건을 완전히 사용하고 런타임에 올바른 크기가 계산된다는 사실에 의존 할 수 있습니다. 그러나 다른 UICollectionViewLayout 과 같은 ChatLayout 더 나은 성능을 얻을 수 있도록 셀의 추정 크기를 제공하는 이점을 얻을 수 있습니다.
ChatLayout 특정 데이터 모델을 사용하도록 시행하지 않습니다. 메시지를 저장하고 원하는 방식으로 UICollectionView 업데이트 할 수 있습니다. 당신이 필요한 유일한 것은 UICollectionView 가지고있는 자연 경계를 존중하고 UICollectionViewDataSource 올바르게 구현하는 것입니다. 예제 앱은 차이 키트를 사용하여 데이터 모델의 변경 사항을 처리합니다.
ChatLayout 특정 UIView S를 사용하여 컬렉션 셀을 생성하도록 시행하지 않습니다. 당신은 당신이 좋아하는 방식으로 그들을 만들 수 있습니다. UICollectionViewCell 또는 UICollectionReusableView 일 수 있습니다. 라이브러리와 함께 묶인 일반적인 UIView 가있어 더 빨리 구축하는 데 도움이 될 수 있습니다. 그러나 사용할 필요는 없습니다.
ChatLayout 키보드 모양 동작을 처리하지 않습니다. 처음부터 그 직접 구현하거나 프로젝트에서 이미 사용중인 라이브러리를 사용해야합니다. 키보드 프레젠테이션을 완전히 제어 할 수 있습니다. 당신이해야 할 유일한 일은 UICollectionView 의 contentInsets 업데이트하는 것입니다.
ChatLayout 입력 컨트롤을 제공하지 않습니다. 좋아하는 사람을 사용하여 원하는 방식으로 사용자 정의 할 수 있습니다. 예제 앱은 예를 들어 inputbaraccessoryView를 사용합니다.
예제 프로젝트를 실행하려면 Repo를 복제하고 먼저 예제 디렉토리에서 pod install 실행하십시오.
ChatLayout Cocoapods, Carthage 및 SwiftPM을 통해 제공됩니다. 사용 세부 정보는 Example 앱을 참조하십시오.
Cocoapods를 사용하는 경우 pod 'ChatLayout' 사용하여 전체 패키지를 설치할 수 있습니다. 제공된 추가 구성 요소가 필요하지 않은 경우 pod 'ChatLayout/Core' 사용하여 레이아웃 자체 만 설치할 수 있습니다.
ChatLayout 활발한 개발 중이며 귀하의 기여를 환영합니다.
이 repo에 기여하려면 기여 가이드 라인을 읽으십시오.
UICollectionViewDiffableDataSource 정보 ChatLayout UICollectionView 로 보내는 업데이트 명령을 처리 할 수 있으므로 UICollectionViewDiffableDataSource 도 사용할 수 있습니다.
유혹이 될 수 있으며 올바른 방법 인 것처럼 보일 수 있지만 보충적 견해를 사용하여 메시지 나 그룹을 장식 하지는 않습니다 . UICollectionView 다른 순서로 처리합니다. UICollectionViewCell 우선 UICollectionReusableView 로 전환 한 후에 만. 당신은 애니메이션 중에 예상치 못한 행동에 직면하게 될 것입니다. 섹션을 사용하는 것에 대해 강력히 조언합니다.
ChatLayout 텍스처와 함께 사용하여 자동 레이아웃 성능을 향상시킬 수 있습니다. 그러나 기본 래퍼는 UICollectionViewFlowLayout 와 독점적으로 작동하도록 하드 코딩되어 있습니다. 문제를 참조하십시오. ChatLayoutDelegate 직접 구현하고 수동으로 노드 크기를 전파해야합니다.
업데이트 중에 이상하거나 예상치 못한 애니메이션이 표시되면 데이터 모델과 UICollectionView 의 performBatchUpdates 로 보내는 명령을 확인하십시오. 특히 DixeKit과 같은 일부 Diffing 알고리즘을 사용하는 경우. Reload가 표시 될 때 Delete/Insert 명령을 보낼 수 있습니다. 가장 쉬운 방법은 ChatLayout.prepare(forCollectionViewUpdates:) 메소드에 print("(updateItems)") 추가하는 것입니다. ChatLayout 당신이 기대했던 것을 모릅니다. 수신 한 명령에 따라 변경 사항을 처리합니다.
끈적 끈적한 헤더 또는 바닥 글은 ChatLayout 에서 지원되지 않지만 기부금을 환영합니다.
ChatLayout MIT 라이센스에 따라 배포됩니다.
ChatLayout 무료로 무료로 사용하기 위해 제공됩니다. 우리는 보장, 약속 또는 사과를하지 않습니다. 경고 개발자.
영어:
러시아인:
이 라이브러리가 유용하고 특히 제작에 사용하는 경우 여기 에서이 프로젝트를 후원하는 것을 고려하십시오. 나는 여가 시간에 ChatLayout 에서 일하고 있으며, 당신의 후원은 오픈 소스 커뮤니티에 계속 개발하고 기여하는 데 도움이 될 것입니다. 귀하의 지원을 통해이 프로젝트에 더 많은 시간과 자원을 전념 할 수있어 앞으로 몇 년 동안 최신 상태와 관련성이 유지 될 수 있습니다.
고려해 주셔서 감사합니다!
Evgeny Kazaev, [email protected]. 트위터 ekazaev
나는 당신이 가질 수있는 모든 질문에 대답하게되어 기쁩니다. 새로운 문제 만 만드십시오.