2012-11-06 4 views
0

나는 UIScrollView에서 UITableViewUIButton를 추가하고있다. 버튼이 tableview 아래에 배치됩니다.UIScrollView의 높이가 변경 되었습니까?

글쎄, 테이블에서 임의의 행을 선택하면 해당 행에 버튼이 추가되고 모든 것이 지금까지는 괜찮습니다.하지만 그 행을 두 번째로 클릭하면 버튼이 제거되지만 문제는 제거와 함께 표시됩니다. 그 버튼은 또한 내 테이블을 위로 스크롤하고 버튼을 눌러 테이블을 그 자리에 둔다. ie. 테이블과 버튼 사이에 틈을 남겨 둡니다. 행을 클릭 할 때마다 내 테이블이 다시로드됩니다. UITableView

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     mainTable.frame = CGRectMake(mainTable.frame.origin.x, mainTable.frame.origin.y, 
             mainTable.frame.size.width, 
             ([menuItemsArray count] * 60) + 380); 

     [scrollView setContentSize:CGSizeMake(320,([menuItemsArray count] * 60) + 80 + 350)]; 

     reserverBtnBottom = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
     [reserverBtnBottom setFrame:CGRectMake(20.0f,mainTable.frame.size.height,280, 40)]; 
     [reserverBtnBottom addTarget:self action:@selector(reserveBtnAction) forControlEvents:UIControlEventTouchUpInside]; 

     [reserverBtnBottom setBackgroundImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal]; 
     [reserverBtnBottom setAlpha:1]; 
     [reserverBtnBottom setTitle:@"Reserve this table" forState:UIControlStateNormal]; 
     [reserverBtnBottom setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
     [scrollView addSubview:reserverBtnBottom]; 
rest thing goes here 
} 

아래 추가 UIButton에 대한 코드는 내가 무엇을 놓치고? 미리 감사드립니다. 이 방법은 새로운 높이를 계산하기 위해 한 번 호출 할 수있는 단일 행의 상태를 변화로

+0

어떻게 동적 높이의 테이블 아래의 버튼을 유지하는 레이아웃을 수행합니까? 테이블 바닥 글보기를 사용하면 간단하게 만들 수 있습니다.이 방법은 답이 아닌 대안입니다. –

+0

@ A-Live 버튼의 프레임을 설정하고 y 좌표가 테이블의 높이와 같도록 지정하고 있습니다. – Blios

+0

버튼의 프레임은 어디에 설정합니까? heightForRowAtIndexPath 메소드의 –

답변

0

오랜 시간 후 나는 내 문제를 해결. viewWillAppear 대신 heightForRowAtIndexPath에이 코드를 넣어 -

mainTable.frame = CGRectMake(mainTable.frame.origin.x, mainTable.frame.origin.y, 
             mainTable.frame.size.width, 
             ([menuItemsArray count] * 60) + 380); 

     [scrollView setContentSize:CGSizeMake(320,([menuItemsArray count] * 60) + 80 + 350)]; 

및 jQuery과의 바닥 글에 내 reserveBtnBottom 이동합니다. 그의 큰 도움을 A-라이브

감사합니다.

0

heightForRowAtIndexPath는 이러한 계산에 대한 나쁜 곳입니다. 호출 될 때 셀은 여전히 ​​오래된 높이 값을 가지며 테이블도 마찬가지입니다.

버튼의 위치 계산은

예에있는 ScrollView 인 테이블 버튼 수퍼 layoutSubviews:의 방법으로 이동한다. 그것이 작동해야하는 방식은 수퍼 뷰가 프레임을 변경하면 모든 하위 뷰 프레임을 다시 계산하는 것입니다.

layoutSubviews:을 재정의하는 대신 프레임 계산이 viewController으로 처리되는 경우가 있는데, 그 방법은 잘못된 방법으로 수행 한 것입니다. scrollView layoutSubviews:을 재정의하고 싶지 않으면 프레임 계산을위한 더 나은 장소를 찾아야합니다.

테이블 아래에 단추를 추가하기 위해서 scrollView 만 필요한 경우에는 내 경험에 비추어 볼 때 스크롤보기를 없애는 것이 좋습니다 (최소한 다른보기에서는 스크롤보기가 없기 때문에 좋을 것입니다. 연습) 버튼을 footerView 테이블에 추가합니다. 꼬리말보기는 테이블 아래에 표시되고 함께 스크롤됩니다.

+0

그래, 난 것을했지만 문제는 내가 선택하면 행 테이블 위로 스크롤하고 (이 잘 작동 클릭 그 두 번째 시간은 '아무튼주의 하단에 일부 공간을 떠나 내가 행을 두 번 클릭하면 처음에 발생된다는 것이다 t 평균 더블 클릭) – Blios

+0

선택/선택 취소시 셀 높이를 변경합니까? 왜'heightForRowAtIndexPath'에 반환 값이 없나요? –

+0

아니요, 선택/선택 취소시 셀 높이를 변경하지 않고 heightForRowAtIndexPath에서 셀 높이를 반환합니다. – Blios

관련 문제