0

我正在添加UITableViewUIButtonUIScrollView按钮位于 tableview 下方。

好吧,当我从表中选择任何行时,它会在该行上添加一个按钮,到目前为止一切正常,但是当我第二次单击该行时,它会删除添加在其上的按钮,但问题是随着删除该按钮它也向上滚动我的表格,表格下方的按钮位于其位置,即。它在表格和按钮之间留下了空隙。每次单击一行时都会重新加载我的表。UIButton在下面添加代码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
}

我错过了什么?提前致谢。

4

2 回答 2

0

heightForRowAtIndexPath对于这种计算来说是一个不好的地方,因为你正在改变一个单行状态,这个方法可能会被调用一次来计算新的高度。当它被调用时,单元格仍然具有旧的高度值,表格也是如此。

按钮位置计算应移至layoutSubviews:表格和按钮超级视图的方法,您的示例中它是一个滚动视图。它应该工作的方式是,一旦它们中的任何一个更改了它的框架,超级视图就会重新计算所有子视图框架。

有时,不是用layoutSubviews:处理覆盖框架计算viewController,而是你试图做的,但你以错误的方式做。如果您不想覆盖 scrollView ,则需要为框架计算找到更好的位置layoutSubviews:

如果您只需要滚动视图来添加表格下方的按钮,那么根据我的经验,摆脱滚动视图会更好(至少因为您在另一个滚动视图中确实有滚动视图,这不是一个好习惯)并添加表footerView 的按钮。页脚视图显示在表格下方并与表格一起滚动。

于 2012-11-06T10:40:47.343 回答
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的大力帮助。

于 2012-11-09T07:03:50.940 回答