2011-12-04 9 views
-3

그냥 아이폰 OS 개발에 젖은 내 발을 얻는 시도 1 일에 실패, 그래서 내가 여기에 정확한 수준의 세부 정보를 얻고 희망 .xib를 통해 생성 된 테이블 셀. 사실 여러 라벨, 그 중 하나는 다양한 길이 (따라서 다양한 감싸 인 높이)입니다. heightForRowAtIndexPath 등이 적절하게 재정의되고 두 레이블에 필요한 높이가 올바르게 계산되어 각 레이블에 할당됩니다. .frameUILabel의 위치는

두 가지 크기가 모두 설정되면 더 작은 고정 길이의 프레임 .origin.y를 설정합니다. 항상 한 행 높이) 레이블을 큰 레이블의 레이블과 일치시킵니다. 이 작업은 cellForRowAtIndexPath을 통해 진행될 수 있지만 새롭게 생성 된 셀의 초기 표시에서는 원점이 위쪽에 붙어있는 것과는 반대로 컨테이너에서 세로로 중심에 있지 않은 것처럼 보입니다.

셀을 다른보기로 "이동"한 다음 (현재 재사용되고 이미 크기가 적절하게 조정 된 컨테이너로) 돌아 오면 이전과 같이 위치가 설정되고 예상 한 위치에 나타납니다.

cellForRowAtIndexPath 반품 후 컨테이너의 크기가 조정되는 것과 같으며, 그 곳의 어딘가에서 우리 라벨을 찾을 수 있습니다. 이것은 왜 세포를 재사용하면 나중에 문제가 해결되는지 설명 할 수 있습니다.

필자는 내부 및 외부 모드와 기본 설정, 스트레치 설정 등 모든 명백한 조합을 시도해 보았습니다. 설명 및/또는 해결 방법이 손실되었습니다.

는 업데이트 :

Changing the position of custom UIButton in custom UITableViewCell 질문에 대한 제안은 문제를 해결했다. 해결책은 UITableViewCell을 서브 클래스 화하고 layoutSubviews을 오버라이드하여 TableView가 정상적인 위치 지정을 한 후에 하위 요소의 위치를 ​​다시 잡을 수있는 기회를 얻는 것이 었습니다. 그 사람이 여기에 응답하거나 현상금이 만료되면 코드를 사용하여 답변을 드리겠습니다.

+0

'viewWillAppear :'내부에서'[self.tableView reloadData]'를 (를) 호출 해 보았습니까? 이렇게하면보기가 표시되기 전에 모든 셀을 강제로 다시로드하고 표시 할 수 있습니다. 문제에 대한 설명은 아니지만 해결 방법 일 수 있습니다. 당신이 단순히 잘못된 순서로 어떤 일이 일어나고있는 것처럼 들립니다. – Stuart

+0

비슷한 문제가 있습니다. http://stackoverflow.com/questions/8352530/changing-the-position-of-custom-uibutton-in-custom-uitableviewcell. 누구나 두 가지 질문에 대한 해결책을 찾을 수 있다면 좋을 것입니다[email protected] Paul Roub - 임시 해결 방법을 찾았습니까? 그렇다면 공유하십시오. – MadhavanRP

+0

heightForRow 및 cellForRow에서 코드 또는 관련 섹션을 포함하십시오. 라벨을 옮길 때 높이를 설정할 때와 관심을 가질 때가 있습니다. 아마도 부정확 한 정렬과 원본 펜촉 레이아웃의 일부 스크린 샷도 좋을 것입니다 – jrturton

답변

6

UITableViewCell에서 복잡한 레이아웃을 수행하는 경우이를 cellForRowAtIndexPath 밖으로 유지하려고합니다. 하나의 옵션은 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath에서 레이아웃을 수행하는 것이지만 사용자 정의 UITableViewCell 클래스에서 레이아웃을 캡슐화하는 것을 선호합니다.

자신의 UITableViewCell 서브 클래스를 만드십시오. 사용자 정의 버튼/레이블 /보기를 만들어 init 메소드의 셀 contentView에 추가하거나 접근 자 속성을 통해 느리게 생성하고 추가하십시오. layoutSubviews를 무시하고 버튼을 원하는대로 배치합니다. 이 같은

뭔가 :

@implementation MyCustomCell 

- (void) init 
{ 
    self = [super initWithStyle: UITableViewCellStyleDefault reuseIdentifier: nil]; 
    if (self != nil) 
    { 
     _myButton = [[UIButton buttonWithType: UIButtonTypeRoundedRect] retain]; 
     [self.contentView addSubview: _myButton]; 
    } 

    return self; 
} 

- (void) layoutSubviews 
{ 
    [super layoutSubviews]; 

    // dynamic layout logic: 
    if (...) 
    { 

     _myButton.frame = CGRectMake(10, 10, 100, 30); 
    } 
    else 
    { 
     _myButton.frame = CGRectMake(20, 10, 50, 30); 

    } 
} 
+0

제 게시물을보실 수 있습니까? 그 비슷한 질문은 그것을 해결하는 방법을 모른다. http://stackoverflow.com/questions/27347937/changing-position-of-a-uilabel-for-a-custom-uitableviewcell @TomSwift –

0

나는 또한 비슷한 문제에 직면했다.

이 방법으로 코드를 삽입하면 효과가있었습니다.

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
// here. 
} 
+0

그 긴 시간은 도움이됩니다. 특히 문제가 오래 전에 해결 된 이래로 – SmokeDispenser