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 中调整大小