2016-04-27 57 views
-1

我们的表的排列工作良好,除了渗入“载体区”的顶部细胞的顶部排列。解决这个问题需要什么?iOS:顶级UITableView行渗入载体

enter image description here

我们使用自定径细胞:当前制约

override func viewDidLoad() { 
    super.viewDidLoad() 
    tableView.estimatedRowHeight = 68.0 
    tableView.rowHeight = UITableViewAutomaticDimension 

概述:

enter image description here

+0

检查桌面的顶层空间。它是从TopLayout(在状态栏之后)还是View?开始的? –

+0

抱歉不知道你在说什么...... –

+0

检查约束。 tableview的Topspace是从TopLayout(从20开始的y位置)开始的?或从Viewcontr查看原点(y = 0)? –

回答

3

基本上苹果不希望你做你正在做的事情。看看苹果的应用程序(设置,邮件等)。你会从来没有看到一个全屏幕的表格视图,没有导航栏在顶部。所以模仿一下。而不是对抗框架,将视图控制器包装在UINavigationController中,并让导航栏自动向下推动表格视图的顶部。

0

选择表视图。在屏幕的右下角(将对象拖动到屏幕的左侧),您将看到4个小按钮。如果你点击右边的第二个方块(两边有一条正方形),你会看到一个小的子菜单添加新的约束。在它下面,你有一个有4个值的正方形(右上角 - 右下角)。确保最上面的一个是0,然后单击半透明虚线红色线。它应该变成红色。现在只需点击底部的“添加约束”按钮即可完成。

+0

我认为最高的应该是20是不是?为了适应状态栏的高度。 – sikhapol

+0

Xcode不允许我在选择表格视图时添加任何约束.... –

+0

@sikhapol如果选择“约束到边距”,那么它是0.否则20。 – Lawrence413

2

通常,当您使用的导航控制器包住视图控制器,TopLayoutGuide(和BottomLayoutGuide会为您和“调整滚动查看插图”,你可以在故事板文件中设置设置,它会自动设置的contentInsets但是由于您不使用导航控制器来包装您的视图控制器,因此您有三个选项:

1.手动设置表格视图的框架以抵消状态栏的高度

我们只是将表视图向下移动20点并让它缩短20分。理想的地方是你的代码中的某个地方,我们知道每当超级视图的边界被改变时它都会被调用。其中之一是viewDidLayoutSubviews

请尝试将此代码放入您的视图控制器的代码中。

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    self.view.superview!.backgroundColor = UIColor.whiteColor() 
    let insets = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0) 
    self.view.frame = UIEdgeInsetsInsetRect(self.view.superview!.bounds, insets) 
} 

请注意,我在上海华盈的背景颜色设置为白色,因为上海华盈(这很可能是UIWindow)可能没有背景色,它将使顶部显示为黑色。通常在生产代码中,您可能想要在设置框架之前检查超级视图的边界是否真的发生了变化。

2.使用UIViewController并添加UITableView作为子视图。

这种方式Interface Builder将允许您设置所有你想要的约束。

3. UINavigationController

只是包装这一点,它会出现这样的有顶部的导航栏大多数应用程序。这可能不是你想要的。但是我很少看到没有导航控制器包装的表格视图。

enter image description here