2012-11-06 55 views
0

我在UIScrollView中加入UITableViewUIButton。按鈕放在tableview下面。UIScrollView的高度變化了嗎?

那麼,當我從表中選擇任何行它在該行上添加一個按鈕,並且每件事情都可以直到現在,但是當我第二次單擊該行時,它刪除按鈕添加它,但問題是,隨着刪除該按鈕,它也滾動我的桌子和按鈕波紋管桌子駐留在它的地方,即。它留下了桌子和按鈕之間的空隙。 每次單擊某行時,我的表格都會重新加載。對於下面的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

你在哪裏設置按鈕的框架? –

回答

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)]; 

和移動我reserveBtnBottom到的UITableView的頁腳。

感謝A-Live他的巨大幫助。

0

heightForRowAtIndexPath對於這樣的計算是一個不好的地方,因爲你正在改變單行狀態,這個方法可能被調用一次來計算新的高度。當它被調用時,單元格仍然具有舊的高度值,表格也是如此。

按鈕位置計算應該被移動到layoutSubviews:方法的表和按鈕superview這是你的例子中的scrollView。它應該工作的方式是,superview重新計算所有的子視圖幀,一旦它們中的任何一個改變了它的框架。

有時而不是覆蓋layoutSubviews:框架計算是用viewController來處理的,這就是你想要做的,但是你做錯了。如果您不想覆蓋scrollView layoutSubviews:,則需要爲框架計算找到一個更好的位置。

如果你只需要scrollView來添加表格下方的按鈕,那麼從我的經驗中擺脫滾動視圖會更好(至少因爲你在另一個滾動視圖中有滾動視圖,這從來不是一個好東西練習)並將該按鈕添加到表格footerView。頁腳視圖顯示在表格下方並與其一起滾動。

+0

是的,我做到了,但問題是,當我選擇一個行表滾動向上,留下一些空間在底部,它發生時,我點擊第二次在行上,第一次點擊它工作正常(注意,第二次沒有' t表示雙擊) – Blios

+0

您是否在選擇/取消選擇時更改單元格高度?爲什麼'heightForRowAtIndexPath'沒有返回值? –

+0

不,我不更改選擇/取消選擇單元格高度,我從heightForRowAtIndexPath返回單元格高度。 – Blios