UIScrollView的高度会发生变化吗?

时间:2012-11-06 07:05:31

标签: objective-c ios uitableview uiscrollview

我在UITableView中添加了UIButtonUIScrollView。按钮位于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
}

我缺少什么? 提前致谢。

2 个答案:

答案 0 :(得分:0)

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

按钮位置计算应移至表格的layoutSubviews:方法和按钮 superview ,这是您示例中的scrollView。它应该工作的方式是superview重新计算所有子视图帧,一旦它们改变了它的帧。

有时候,不是覆盖layoutSubviews:而是使用viewController来处理帧计算,这是你试图做的,但是你做错了。如果您不想覆盖scrollView layoutSubviews:,则需要为帧计算找到更好的位置。

如果您只需要使用scrollView添加表格下方的按钮,那么从我的经验中删除滚动视图会更好(至少因为您在另一个滚动视图中有滚动视图,这绝不是一个好习惯)并将按钮添加到表footerView。页脚视图显示在表格下方并与其一起滚动。

答案 1 :(得分: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 ,感谢他的大力帮助。