iOS UITableView 调整高度/无法向下滚动问题

Posted

技术标签:

【中文标题】iOS UITableView 调整高度/无法向下滚动问题【英文标题】:iOS UITableView resize height / cant scroll down issue 【发布时间】:2013-11-22 02:06:08 【问题描述】:

这里是初学者 ios 开发人员。

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

截图:

当按下绿色加号按钮时,这些元素会向下移动,为插入一些新元素腾出空间(我还没有实现,因为我被困在这个问题上)

编辑

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

【问题讨论】:

你能添加一些代码吗?或者上传一个示例项目?? 我添加了一个示例项目。 【参考方案1】:

您的问题在于您更改发票的方法。你只改变了invoiceBottomView的约束,但你没有改变invoiceBottomView的superview的大小,即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,这样table view就会知道size变了,table会改变contentSize

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

【讨论】:

非常感谢您的时间和帮助。这对我有用。我会尽力修复拾取器。我不确定在哪里嵌入它们。再次感谢! :)【参考方案2】:

您设置 - (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;
    
];

【讨论】:

一个表格视图控制器已经有一个滚动视图。 RipzCurlz,我想知道你是如何改变行高的。如果您只是在更改视图的高度,或者您正在使用协议:tableView:heightForRowAtIndexPath: k,也许我误解了他的设计。我以为他在顶部有一个tableview,然后在tableview 下方有一个uiview。 RipzCuriz,你的 UIView 是单元格 contentView 的子视图吗? 我尝试添加 UIScrollView 但无法使其正常工作。更改高度代码在我添加到原始问题的示例项目中。 Nate Ren,我不确定 UIView 是否是单元格 contentView 的子视图。当我设置它时,我将 UIView 拖放到静态单元格部分的正下方。 Nate Ren,感谢您的代码。这对我来说是半工作的。它确实调整了 UIView 的大小,但是加号按钮只工作了 5 次然后停止工作,在第 5 次按下“条款”和“按钮”按钮后也停止工作。 问题在于您没有更改 invoicePickerViewsContainer 的大小,因此您的按钮超出了视图的范围。而且按钮永远不会捕获用户事件。

以上是关于iOS UITableView 调整高度/无法向下滚动问题的主要内容,如果未能解决你的问题,请参考以下文章

如何根据ios 8中的内容动态调整UITableview Header高度

iOS 8 Today Widget 使用自动布局来适应 UITableView 的高度

TableView Height 无法在 IOS 中调整大小

如何滚动到 UITableView 底部以查看所有单元格内容而不调整单元格高度?

向下滚动时,UITableview 看不到最后一个单元格

没有自动布局的 IOS11 的 Tableview 高度调整