【问题标题】:Dynamically resize UITableView in UIViewController created in Storyboard在 Storyboard 中创建的 UIViewController 中动态调整 UITableView 的大小
【发布时间】:2014-02-01 18:57:13
【问题描述】:

在故事板上的 UIViewController 中,我有一个 UITableView,它的大小专门设置为在一个部分中有两行,没有页眉或页脚,即高度为 88.0f。在某些情况下,我想添加第三行。所以在viewWillAppear:animated:(和其他逻辑位置)中,我将帧设置为高 44.0f 个逻辑像素:

CGRect f = self.tableView.frame;
self.tableView.frame = CGRectMake(f.origin.x, f.origin.y, f.size.width, f.size.height + 44.0f);
NSLog(@"%@",NSStringFromCGRect(self.tableView.frame));

没有争议;相当标准的调整大小代码,但是......它不起作用! tableView 的高度在视觉上不会改变。 NSLog 语句报告了我期望的高度 (132.0f)。这是因为我使用的是故事板吗?我不确定为什么这不起作用。

【问题讨论】:

  • 故事板与此无关。另一方面,自动布局可能。你在用吗? (顺便说一句,“逻辑像素”我猜你的意思是“点”?)
  • 您是否也在更改表格视图的数据源以包含第三行?你是否也在重新加载你的表格视图?
  • @Gavin - 是的,数据源报告了正确的计数。第三行出现了,但我必须滚动才能看到它,这不是我想要的。
  • @GuillaumeAlgis - 我没有明确使用 AutoLayout(我没有设置任何约束)。我不是通过使用情节提要“使用”自动布局吗?
  • 自动布局是情节提要本身的一个选项。您可以为情节提要启用或禁用它,默认情况下它处于启用状态。但是你可以禁用它。

标签: ios iphone objective-c uitableview uistoryboard


【解决方案1】:

为情节提要中表格视图的高度设置自动布局约束。然后将约束连接到视图控制器中的插座,以便您可以在代码中访问约束。将约束设置为 88。当您要更改表格视图的高度时,只需将约束的常量更改为 132。

【讨论】:

  • 有趣。那是改变约束的标准做法吗?我永远不会想到这样做。现在我知道它有效,我一直在使用它。
  • 我很高兴 :) 你的回答加文!我现在可以睡个好觉了:)
【解决方案2】:

只有在调用layoutSubviews 之后才能修改框架,这发生在viewWillAppear 之后。在UIVIew 上调用layoutSubviews 后,您可以更改尺寸。

正如 Gavin 所建议的,如果您启用了自动布局,您可以通过情节提要将约束添加到 UITableView,连接高度约束并修改其值,如下所示:

constraint.constant = 132.0f

否则,如果您禁用了自动布局,您可以简单地更改框架以更新高度,但将代码放在不同的方法中,例如 viewDidLoad:

【讨论】:

    【解决方案3】:

    最近我正在尝试做你所做的事情。我也遇到了同样的问题,tableview 高度不会改变。现在我得到了解决方案,您需要在更改框架后致电layoutSubviews。它对我有用。

    - (void)viewDidAppear:(BOOL)animated {
        [super viewDidAppear:animated];
    
        tableView.frame = CGRectMake(tableView.frame.origin.x, tableView.frame.origin.y, tableView.frame.size.width, tableView.frame.size.height + 44.);
        [tableView layoutSubviews];
    }
    

    不要将它放在viewDidLoadviewWillAppear: 中,因为即使调用了layoutSubviews,框架也不会改变。把它放在viewDidAppear:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      相关资源
      最近更新 更多