【问题标题】:iOS - resize UITableView height programmaticallyiOS - 以编程方式调整 UITableView 高度
【发布时间】:2012-08-13 18:01:16
【问题描述】:

我在尝试使用 iOS5 和 Storyboard 以编程方式调整托管在 UIViewController 中的 UITableView 的高度时遇到问题。 VC 显示主/详细记录样式,UITableView 显示详细记录。根据显示的主记录类型,屏幕底部可能需要一组按钮。如果不需要按钮,那么我希望UITableView 扩展它的高度以利用可用空间。我正在使用以下代码:

CGRect tableFrame = [tableListView frame];
if (blnApprovalRec == YES)
    tableFrame.size.height = 127;
else
    tableFrame.size.height = 170;
[tableListView setFrame:tableFrame];

只要主记录发生变化,包括屏幕首次加载到viewDidLoad 时,就会调用此代码。问题是当 VC 加载时,UITableView 不使用指定的大小进行绘制 - 它只是使用 IB 的默认大小进行绘制。一旦用户更改了主记录以重新加载表,那么一切正常,并且大小会根据需要更改。我尝试使用 setNeedsDisplaysetNeedsLayoutreloadData 强制重绘,但这些都不起作用。

【问题讨论】:

  • 上面的代码你是用什么方法调用的?
  • 这段代码是不是放在了viewDidLoad之类的方法里?

标签: iphone ios uitableview resize frame


【解决方案1】:

我有同样的问题,只是需要从

移动代码
   - (void) viewDidLoad

   - (void)viewDidAppear:(BOOL)animated 

【讨论】:

    【解决方案2】:

    问题是当 VC 加载时,UITableView 没有使用指定的大小进行绘制

    这种情况发生在加载表格视图时,但它的 UI 没有刷新。请验证您是否在 viewDidLoad 或 viewWillAppear 中强制调用。

    希望您的此代码采用单独的方法:

    CGRect tableFrame = [tableListView frame];
    if (blnApprovalRec == YES)
       tableFrame.size.height = 127; 
    else
       tableFrame.size.height = 170; 
    [tableListView setFrame:tableFrame];
    

    当视图最初出现时,您可能拥有来自主记录的默认选定值。 您可以在 viewWillAppear 的调用函数中设置该值/实例。

    您能否显示方法名称和代码,您是如何在代码的 sn-ps 之上强制调用的?

    【讨论】:

    • 非常感谢 Ankit,我正在调用 viewDidLoad 中的代码,我猜这意味着控件尚未完全加载。我将代码移至 viewWillAppear,现在一切正常:-)。
    【解决方案3】:

    您可以通过编程方式调整 UITableView 的大小,但您也需要通过编程方式创建 UITableView。不要使用情节提要。

    【讨论】:

    • 是的,据我所知,这是正确的。您必须以编程方式创建表格视图以调整其大小。
    • 这是正确答案。令人震惊的是,您仍然无法在 Xcode 6.3 中使用情节提要来做到这一点
    【解决方案4】:

    确保在表格加载后设置框架。

    您在哪个方法中调用该代码?

    【讨论】:

      【解决方案5】:

      这很棘手,很难像这样动态调整大小。

      我会为您的表格尝试“setNeedsLayout”和“setNeedsDisplay”,并为您的屏幕强制重绘。

      除此之外,我会将它的情节提要到最小尺寸并使用代码来扩展它。

      通常苹果不喜欢我们这样做,如果可能的话,您的按钮应该绘制在另一个视图内的视图顶部。

      抱歉,我不能更准确地说,但我已经解决了所有这些问题,方法是到处乱搞和使用 hack,放弃调整大小和重新设计。不过请告诉我你的情况:)

      【讨论】:

      • 不确定为什么动态调整视图大小会“棘手”?苹果在哪里说他们不希望开发人员调整视图大小?为什么要在 tableview 上绘制按钮?
      • 嗯,您正在关注文档并使用 setFrame 是吗?我是说在动态调整大小时,遵循文档对我来说还没有用。在其他视图之上绘制视图是我过去将按钮添加到 tableview 上的方式。但真正的解决方案是使用导航和标签栏控制器以及表格视图 - 我必须这样做以避免动态调整大小和移动东西的需要。
      猜你喜欢
      • 2013-01-09
      • 2020-01-11
      • 2014-07-05
      • 1970-01-01
      • 2016-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多