2013-08-01 4 views
0

사용자 정의 헤더 섹션과 셀이있는 tableview가 있습니다. 내 모델을 만들었고 모델은 "나쁜"디자인 인 섹션 뷰 헤더에 대한 참조를 유지하지만 실제로는 애플의 샘플 코드를 따랐습니다. 내 셀에는 레이블이있는 마녀가 여러 줄의 데이터를 보유 할 것이므로 모든 줄이 보이도록 크기를 조정해야합니다. 나는 그것이 heightForRowAtIndexPath 권한과 함께 컨트롤러 작업이 될 것이라고 생각합니까? 사실 그곳에서 세포를 꺼내서 거기에서 높이를 얻는 것은 어렵지 않을 것입니다. 그러나 세포가 아직 생성되지 않았다는 사실은 불가능합니다. (틀렸다면 고쳐주세요)UITableView 개별 행 높이 결정

제가 생각하기에이 방법을 사용할 수있는 유일한 방법은 내 모델의 셀에 대한 참조를 만드는 것입니다. 그렇습니다, 나쁜 시민입니다. 그러나 그런 식으로 나는 필요한 높이를 쉽게 얻을 수있었습니다.

또 다른 방법은 sizeWithAttributes :를 사용하여 높이를 계산하는 방법을 만드는 것이지만 실제로보기에는 외관이 좋지 않아서 디자인이 좋지 않은 것처럼 보입니다.

나는 여기에서 기본적인 것을 감독하고 있습니까? 아니면 그것이 그저 그런 방식일까요?

나는 당신이 원하는 것을 모르지만 뭔가를 물어 보도록 요청하기 때문에 어떤 코드도 첨부하지 않았습니다.

답변

3

지정한 결과를 얻으려면 cellForRowAtIndexPath를 호출 할 필요가 없습니다. 나는

**heightForRowAtIndexPath** 
{ 
    if ([[arrData objectAtIndex:indexPath.row].length] < 30) 
    return 40; // Initial height 
    else if ([[arrData objectAtIndex:indexPath.row].length] > 30) 
    return 60; // Or any other value as per your need 

} 

에서이 크기를 조정할 것,

배열 지금

NSArray *arrData = [[NSArray alloc]init]; 

하자, 콘텐츠를 저장하기 위해 배열 또는 사전의 배열을 사용하는 생각 셀 안의 문자열의 길이에 따라 셀의 높이.이

{ 
int _iCount = [[self.arrData objectAtIndex:indexPath.row].length] % 40; 

if (_iCount == 0) 
return 40; 
else 
return 40*_iCount; 
} 

쓰기 , 당신이 heightForRowAtIndex에

더 동적으로 만들하고자하는 경우 //

[cell.lblText setFrame:CGRectMake(0,0,cell.frame.size.width, cell.frame.size.height)]; 

사용 cellForRowAtIndexPath 이 그것을 해결할 것입니다.

+0

그래서 특정 문자열의 높이를 계산하는 "실제"방법이 있습니다. sizeWithAttributes : (sizeWithFont는 무시 됨)를 사용할 수 있고 글꼴을 특성으로 설정할 수 있다는 것을 알고 있습니다. 하지만 알 수없는 글꼴을 사용한다고 가정하면 높이를 어떻게 계산합니까? 논리는 유효하다고 생각하지만 실제로는 작동하지 않습니다. 비록 당신이 대답을 할 수 있다면 당신은 내 하루를 저장합니다 :) 답변을 주셔서 감사합니다. 매우 많이 감사합니다 – chrs

+0

이 시나리오에서 일어나는 일은 글꼴 크기와 셀의 너비 또는이 경우의 uilabel에서 계산 된 레이블의 줄 수에 따라 높이가 자동으로 계산된다는 것입니다.따라서 문자열의 길이를 계산할 수 있고 나머지는 고정되어 있습니다. – Hitesh

+0

나는 그것을 얻지 않는다. 무슨 일이 있어도 40을 돌려주고 있습니까? 항상 세포의 높이를 40으로 만들지 않을까요? – chrs

0

heightForRowAtIndexPath가 호출 될 때 셀이 이미 만들어져 있다고 생각합니다. 따라서이 메소드에서 셀을 가져 와서 레이블의 높이를 계산하고 tableviewCell의 올바른 높이를 반환 할 수 있습니다.

+0

문제는, 그 호출 cellForRowAtIndexPath : 내부 heightForRowAtIndexPath : 충돌을 일으킬 것입니다. – chrs