UITableView 高度不适合不同 iPhone 设备的容器垂直(底部)

Posted

技术标签:

【中文标题】UITableView 高度不适合不同 iPhone 设备的容器垂直(底部)【英文标题】:UITableView Height does not fit container vertically (bottom) for different iPhone devices 【发布时间】:2014-10-17 10:52:43 【问题描述】:

我的一个视图中有一个 UITableView。我一直在 iPhone 4S 上测试该应用程序,它运行良好。现在我尝试在 iPhone 5S(屏幕更高)上进行测试。 UITableView 不适合底部。我知道这与自动布局有关,但我不确定如何设置。

我想到的两种方法是:

1-) 以编程方式确定屏幕高度,然后以编程方式将 UITableView 高度设置为适合屏幕 2-) 在界面生成器中使用自动布局。但我收到警告说 AutoLayout 仅适用于 ios 8 及更高版本。那么对于较低版本的 iOS,我该如何实现呢?

所以我的问题是:如何动态设置 UITableView 的高度,使其适合屏幕底部,而不管 iPhone 屏幕的高度如何?

感谢您的帮助。

【问题讨论】:

自动布局从 iOS 6 开始可用。硬编码屏幕尺寸是一个糟糕的主意,因为它不能在不同的设备屏幕尺寸(iPhone 5、iPhone 6、iPhone 6+ 和各种 iPad)之间移植。使用自动布局。 好的,谢谢,我会调查的。你推荐一个教程吗? 嗯...我个人刚刚观看了免费的 WWDC 视频(自 2012 年以来,每个 WWDC 都有某种自动布局视频),但我从未遵循过教程。我知道自动布局也包含在 iTunesU 的“为 iPhone 和 iPad 开发 iOS 7 应用程序”中,还有一个 Ray Wenderlich 教程 (raywenderlich.com/50317/…)。请注意,在 iOS 7 和 iOS 8 中,为了增强自动布局进行了一些小改动。由于 iOS 8 情节提要发生了较大的变化,请先查看 WWDC 2014 视频,了解布局 UI。 非常感谢。还有一个问题:在这种特定情况下,我将如何使用自动布局?我会从 tableview 添加一个约束到视图容器的底部,以便它根据设备伸展吗?谢谢 您可以将 TableView 的左侧、右侧、底部和顶部的约束附加到 SuperView,通常边距为 0。这将告诉 TableView 在其 SuperView 中占用尽可能多的空间.还记得通过设置适当的启动图像来告诉项目您支持更大尺寸的屏幕。 【参考方案1】:

您可以像这样为不同的屏幕尺寸设置不同的表格视图。 这在 .m 文件的标题中定义

#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )

这是在 viewDidLoad() 方法中定义的

 if (IS_IPHONE_5) 
    self.tableView = [[UITableView alloc]initWithFrame:CGRectMake(0,0, 320, 568)];
else
        // define for 3.5 inch screen
    self.tableView = [[UITableView alloc]initWithFrame:CGRectMake(0,0, 320, 480)];

我希望这会有所帮助..

【讨论】:

这不会为 iPhone 6、iPhone 6+ 和所有 iPad 设置正确的尺寸。请改用自动布局。 我觉得有必要将此作为正确答案删除。正如@RoboticCat 提到的。当我们可以使用自动布局时,硬编码这些东西似乎不合逻辑。不过感谢您的努力。

以上是关于UITableView 高度不适合不同 iPhone 设备的容器垂直(底部)的主要内容,如果未能解决你的问题,请参考以下文章

iPhone + UITableView + 行高

将 UITableView 大小调整为 iPhone 5/5s

iPhone - 帮助在 UITableView 中添加 9 个不同的部分

当单元格高度动态更改时,UITableView 出现不自然的混蛋

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

如何使 UITableView 适合内容的大小