에서 자동 레이아웃을 사용하여 동적 높이를 사용하는 방법에 대한 읽을 수 있습니다.
xib 파일로 이동하여 UIImageView 및 UILabel 개체를 셀에 추가하십시오. 또한 라벨의 콘센트를 만드십시오.
Pavan Kotesh가 언급 한 것처럼 가장 쉬운 방법은 자동 레이아웃을 사용하는 것입니다.
이미지보기 및 레이블에 대한 셀 내용보기에 위쪽 공간 및 아래쪽 공간 제약 조건을 추가하십시오. 그런 다음 두 subviews에 대한 x 위치에 대한 제약 조건을 설정하고 마지막으로 width 및 height 제약 조건을 설정합니다.
뷰의 크기를 변경하려면 높이 상수가 "동등한"유형이어야합니다.
인터페이스 빌더에서 필요한 것은 메시지 설정을위한 하나의 메소드를 서브 클래스에 추가하는 것입니다.
- (void) setMessage: (NSString*) message
{
CGFloat oldLabelSize = _label.frame.size.height;
_label.text = message;
[_label sizeToFit];
CGFloat newLabelSize = _label.frame.size.height;
CGRect frame = self.frame;
frame.size.height += newLabelSize - oldLabelSize;
self.frame = frame;
}
이 메서드를 호출하면 하위 뷰로 셀이 채팅 뷰에 추가됩니다.
편집 :
나는 당신의 -cellForRowAtIndexPath 메소드 구현이 잘못 생각합니다. [ChatViewCell send]
은 무엇을 수행합니까? 나는 이런 식으로 일을 한 것
:
는
먼저 테이블 뷰 컨트롤러 클래스에서 두 개의 배열을 선언합니다. 첫 번째는 메시지 텍스트를 저장하기위한 것이고 두 번째는 셀 높이를 저장하는 것입니다. 또한 이러한 값을 저장할 구조를 만들 수 있습니다. 사용자가 메시지 입력을 마친 후에는 셀 높이를 추정하여 높이와 셀 메시지를 적절한 배열에 배치해야합니다. 그런 다음 insertRowsAtIndexPaths:withRowAnimation:
메서드를 사용하여 테이블 뷰에 새로운 행 (섹션)을 삽입해야합니다. 당신의 cellForRowAtIndexPath 방법에서 다음
:
dequeueReusableCellWithIdentifier 반환 방금 새로운 ChatViewCell 초기화해야하며, if (cell == nil)
문은 적절한 배열로부터 메시지를 설정 한 후 (때문에 당신이 셀의 내용이 화면에 간다 때마다 설정해야 재사용 nil을 경우).
heightForRowAtIndexPath:
메서드에서 셀 높이를 저장하는 배열의 값을 반환합니다.
정확한 답변이 없지만 a) (아래 Pavan 노트에 설명 됨) 맞춤 높이가 정의되어 있고 b) 채팅 버블 이미지가 조각으로 나뉘어져 있고, 상단 중간과 하단에 별도의 이미지가 있으므로 거품을 크게 만들기 위해 중간 이미지를 계속 추가 할 수 있습니다. 어쨌든, JSQMessagesViewController (https://github.com/jessesquires/JSQMessagesViewController)의 소스 코드를 살펴 보는 것이 좋습니다. 이는 정확히 무엇을 설명하는지 않습니다. –