iOS UITableView调整高度/倾斜向下滚动问题

时间:2013-11-22 02:06:08

标签: ios objective-c uitableview uiview

初学iOS开发者。

我所拥有的是一个UITableVIewController,它有1个部分,包含3个静态分组单元格。在那之下我有一个UIView,它有一些按钮和文本字段,当按下其中一个按钮时,UIView高度增加。我的问题是我无法向下滚动以查看UIView底部的内容

截图:

enter image description here

enter image description here

enter image description here

当按下绿色加号按钮时,这些元素向下移动,为插入一些新元素留出空间(我还没有实现,因为我遇到了这个问题)

修改

以下是一个示例项目:https://www.dropbox.com/s/vamxr12n6rrsam7/resizeSample.zip

2 个答案:

答案 0 :(得分:3)

您的问题是在您的方法中更改发票。您只需更改invoiceBottomView的约束,但不会更改invoiceBottomView的超级视图的大小,即invoicePickerViewsContainer。因此,您的tableView不会知道您想要使用tableFooterView(您的invoicePickerViewsContainer)的更多空间。

您可以为此更改代码:

- (IBAction)invoiceLinesAddLine:(id)sender {

    [UIView animateWithDuration:.25 animations:^{

        CGRect invoiceBottomViewFrame = self.invoiceBottomView.frame;
        NSInteger invoiceBottomViewFrameHeight = invoiceBottomViewFrame.size.height;

        NSInteger invoiceLinesTopConstraintValue = invoiceLinesControlsViewTopConstraint.constant;
        NSInteger invoiceLinesBottomConstraintValue = invoiceLinesControlsViewBottomConstraint.constant;

        invoiceBottomViewFrameHeight = invoiceBottomViewFrameHeight + 40;
        invoiceLinesTopConstraintValue = invoiceLinesTopConstraintValue + 40;
        //invoiceLinesBottomConstraintValue = invoiceLinesBottomConstraintValue - 40;

        invoiceBottomViewFrame.size.height = invoiceBottomViewFrameHeight;
        invoiceLinesControlsViewTopConstraint.constant = invoiceLinesTopConstraintValue;
        invoiceLinesControlsViewBottomConstraint.constant = invoiceLinesBottomConstraintValue;

        CGRect invoicePickerViewsContainerFrame = self.invoicePickerViewsContainer.frame;
        invoicePickerViewsContainerFrame.size.height += 40;
        self.invoicePickerViewsContainer.frame = invoicePickerViewsContainerFrame;
        self.tableView.tableFooterView = self.invoicePickerViewsContainer;
        [self.view layoutIfNeeded];

    } completion:^ (BOOL finished){
        if (finished) {
            //actions when animation is finished
        }
    }];

}

您无需更改invoiceLinesBottomConstraintValue,因为您将增加invoicePickerViewsContainer的高度。

然后你需要再次添加tableFooterView,这样表视图就会知道大小的变化,而表格会改变contentSize

现在,你有拣货员的问题......但我不明白为什么你在这个视图中有拣货员。如果要在该视图中保留这些选择器,则需要更改这些选择器或其框架的约束。

答案 1 :(得分:1)

设置 - (IBAction)invoiceLinesAddLine:(id)sender {}的方式以及tableview中的视图在添加更多项目时不会更新self.tableView.contentsize。所以将这些行添加到invoiceLinesAddLines中动画功能的完成功能,然后将增量高度添加两倍(我随意挑选80)

 completion:^ (BOOL finished){
    if (finished) {
        //actions when animation is finished
        CGSize size=self.tableView.contentSize;
        size.height+=80;
        self.tableView.contentSize=size;
    }
}];