2014-09-02 3 views
0

채팅 창이있는 앱을 만들고 있습니다. 이 창에는 사용자 정의 셀에 해당 이미지에 하나의 이미지와 레이블이 있습니다.UI chat in Ios

나는 두 개의 맞춤형 셀을 가지고 있는데 하나는 송신기 용이고 다른 하나는 수신기 용이다. 두 셀 모두 왼쪽 및 오른쪽 정렬과 동일합니다.

댓글 길이를 늘리면 전체 이미지가 이미지 내에서 여러 줄로 표시됩니다 (이미지 크기도 커짐). 이 상황을 어떻게 처리 할 수 ​​있습니까? setVariable 메서드를 사용하여 셀에 내용을 설정하고 있습니다. 아래 코멘트 코드처럼 프레임에 대한 주석 코드를 시도하고 있지만 작동하지 않습니다.

- (void) setComment : (NSString*) Comment 
     { 
     [ txtComment setText : Comment ] ; 
     /*CGRect frame1 = txtComment.frame; 
      frame1.size.height = txtComment.contentSize.height; 
      txtComment.frame=frame1;*/ 
     } 
+0

정확한 답변이 없지만 a) (아래 Pavan 노트에 설명 됨) 맞춤 높이가 정의되어 있고 b) 채팅 버블 이미지가 조각으로 나뉘어져 있고, 상단 중간과 하단에 별도의 이미지가 있으므로 거품을 크게 만들기 위해 중간 이미지를 계속 추가 할 수 있습니다. 어쨌든, JSQMessagesViewController (https://github.com/jessesquires/JSQMessagesViewController)의 소스 코드를 살펴 보는 것이 좋습니다. 이는 정확히 무엇을 설명하는지 않습니다. –

답변

0

사용자 정의 셀 높이를 정의하기 위해 자동 레이아웃을 사용하는 것이 좋습니다. 댓글의 길이에 따라 동적 셀 높이를 만드는 데 도움이됩니다.

서브 클래스있는 UITableViewCell을 또한 XIB 파일을 만들 : 당신이 당신이 다음을 수행 할 수 있습니다 수행하려면 this link

0

에서 자동 레이아웃을 사용하여 동적 높이를 사용하는 방법에 대한 읽을 수 있습니다.

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: 메서드에서 셀 높이를 저장하는 배열의 값을 반환합니다.

+0

이 코드에는 하나의 문제가 있습니다. 스크롤 할 때 테이블보기의 위치가 변경되고 레이블의 텍스트 줄이 여러 줄로 표시됩니다. –

+0

@ user3736489 UITableViewDelegate 및 UITableViewDataSource 메서드를 구현하는 데 몇 가지 문제점이있는 것으로 추측 할 수 있습니다. 보기 컨트롤러 코드를 게시하면 더 명확 해집니다. –

+0

- (NSInteger) tableView : (UITableView *) tableView numberOfRowsInSection : (NSInteger) 섹션 { return [commentArray count];} –