2011-09-04 6 views
3

셀 높이가 설정되면 이해하려고 시도합니다. 코드가 아니라 레이아웃으로 만든 UITableView가 있습니다. 이어서UITableView 셀 높이 설정 수명주기

:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"Setting row height"); 
    return TABLE_VIEW_ROW_HEIGHT; 
} 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"Row height: %f", tableView.rowHeight); 
    // ... other happy stuff that does not change row height but could sure use the real row height 

마지막 NSLog 그 메소드 내의 코드를 필요로하는 것을 의미하는 44보다는 100 리포트 :

#define TABLE_VIEW_ROW_HEIGHT 100.0 

얹는 행 높이를 얻으려면 실제 높이를 사용하지 않는 것이 좋습니다.

내가 확인한 그 (44)

의 결과로, 행이 원하는 크기가

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

실행,

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

전에 그리고이 아닌 기본 크기 높이를 명시 적으로 설정해야합니까? 조사를 수행 한 후

EDIT은 : ​​

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

...보다 적절 모든 행이 동일한 높이 일 때의 행의 높이를 설정하기 위해 사용된다. 나는 잘못해서 모든 행을 같은 높이로 설정했다.

을 수행하는 올바른 방법은 어딘가에있는 viewDidLoad 등으로부터 ...

the_tableview.rowHeight = TABLE_VIEW_ROW_HEIGHT; 

를 호출하는 것입니다. 사실 (코드 생략)했지만 실제로 작동하지 않았습니다. 오늘 밤 나는 이것이 그래픽 레이아웃 도구에 의한 또 하나의 인스턴스라는 것을 깨달았습니다 ... IBOutlet을 UITableView에 연결하는 것을 잊었습니다 ... 그래서 코드는 아무 것도하지 않았고 전체 tableview는 기본 높이 44로 유지되었습니다. 그래서 NSLog에서 44 명이 나왔습니다.

답변

4

코드에서 IndexPath의 특정 행이 아니라 tableView에서 rowHeight를 호출합니다. 이것이 기본값 인 44를 얻는 이유입니다. 기본값을 변경하려면 테이블의 크기 속성에서 변경할 수 있습니다. 모든 행의 높이가 같으면 기본값을 변경하는 것이 좋습니다. 높이가 다른 행이 있으면 높이가 다른 행에 대해 heightForRowAtIndexPath를 구현해야합니다.

코드에서 TABLE_VIEW_ROW_HEIGHT를 정의한 경우이 경우 정의 된 TABLE_VIEW_ROW_HEIGHT 이름을 지정하여 코드에서 tableView.rowHeight를 설정해야합니다.

+0

답변을 수락하지만 원본 게시물 (내 생각에 내가 그 이상으로 뛰어든 후 깨달은 것)에 대한 편집을 참조하겠습니다. –

+0

설정이 제대로되어 있다고 가정하면 정의 된 값을 반환하지만 결과를 얻는 데 효율이 떨어지는 경우 heightForRowAtIndexPath를 사용하여 모든 행의 높이를 설정하면됩니다. –