ios - 使用自动布局时如何从代码更改 UITableView 的高度?

标签 ios objective-c uitableview autolayout

我有一个页面,其中必须有 2 个使用 AutolayoutUITableView。他们将各自占据大约一半的屏幕。我的问题是页面的逻辑要求不时隐藏其中之一。在那种情况下,我需要展开另一个以占据整个屏幕。

我的逻辑是:

在打开页面时,我只会看到第一个 UITableView,里面有一个列表。当我点击一行时,我将不得不在第一个下方显示第二个 UITableView,因此会将屏幕分成 50-50(最好计算第二个的适当高度,但 50-50 是可以的)。

在第二个内部进行一些操作后,它将被设置为隐藏,第一个必须再次展开到整个屏幕。

我的问题是如何做到这一点?

我想我必须添加高度限制,但我必须动态删除和添加它们,或者我必须做其他事情?

附言我想当我同时显示两者时,如果第一个的内容大于可见区域,它将支持滚动吗?

选择前查看(只有一个 UITableView):

---------------------
| * Row 1           |
| * Row 2           |
| * Row 3           |
| * Row 4           |
| * Row 5           |
|                   |
|                   |
|                   |
---------------------

选择前查看(UITableView 都可见):

---------------------
| * Row 1           |
| * Row 2           |
| * Row 3 (SELECTED)|
---------------------
| x row 1           |
| x row 2           |
| x row 3           |
| x row 4           |
---------------------

最佳答案

您应该执行以下操作:
- 添加表格 View 的高度限制
- 在定义为 IBOutlet
ViewController 中声明两个 NSLayoutConstraint 属性 - 将变量连接到 Interface Builder 中的约束。
然后在您的 ViewController 中,您可以调整 TableView 的高度,修改 NSLayoutConstraint 属性的常量。例如

self.heightOfTheFirstTableView.constant = self.view.frame.size.height/2;
self.heightOfTheSecondTableView.constant = self.view.frame.size.height/2;
[self.view layoutIfNeeded];

对于你的问题:

P.S. I suppose that when I show both if the content of the first is larger that visible area it will support scrolling?

是的,它将支持滚动,但前提是用户在 tableView 框架内滚动

关于ios - 使用自动布局时如何从代码更改 UITableView 的高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35575573/

相关文章:

ios - 获取连接到 View 的所有 segues 的列表

ios - 仅在自动布局绘制 View 后如何在动态单元格中为 UIImage 添加约束

ios - 来自对象的一些数据要么不保存要么不加载

ios - 嵌入Youtube 360​​视频在iOS Safari中不起作用

iphone - 这两种在Objective-C中分配内存的方式有什么区别?

objective-c - iOS 中异常处理的正确方法是什么?

objective-c - 显示带有不需要的 backgroundColor 的透明 NSButton

ios - reloadRowsAtIndexPaths:@ [indexPath] withRowAnimation:UITableViewRowAnimationNone在iOS 11上工作不正确吗?

ios - 在 UIImage 上添加文本

ios - 将信息传递给 Storyboard上的 View Controller