具有程序约束的表视图大小

时间:2018-11-30 10:29:00

标签: ios swift tableview constraints

我在UITableView的程序限制上遇到了麻烦。

我的宽度正确,但高度却不正确,因为我在页面顶部还有一个小条,上面只有彩色的UIView。因此,我想使表格视图恰好在条形图的底部开始,但对整个屏幕也有约束。

这是我的tableView代码,

tableView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height - 110)
tableView.center = CGPoint(x: self.view.center.x, y: self.view.center.y + 20)

因此tableView与顶部栏对齐,但现在没有到达屏幕底部。 有帮助吗?

更多代码:

     //Top Bar
    topBar.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: 150)
    topBar.center = CGPoint(x: self.view.center.x, y: self.view.frame.minY)
    topBar.backgroundColor = UIColor.init(fromHexCode: "1462BF")
    view.addSubview(topBar)

3 个答案:

答案 0 :(得分:0)

如果您使用的是自动布局(NSLayoutConstraint),则无需将其锁定或居中放置tableView。

如果不使用“自动”布局,则应将tableView的框架如下所示:

tableView.frame = CGRect(x: 0, y: heightOfYourSmallBar, width: self.view.frame.width, height: self.view.frame.height - heightOfYourSmallBar)

答案 1 :(得分:0)

仅设置框架和中心是不够的,因为当按下/显示视图控制器时,视图的框架可能会改变。您应该做的是使用布局约束。我发现Layout Anchors是通过编程方式创建约束的最简单方法

tableView.translatesAutoresizingMaskIntoConstraints = false
tableView.topAnchor.constraint(equalTo: topBar.bottomAnchor).isActive = true
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true

如您所见,tableView的顶部锚点与topBar的底部锚点对齐,其他tableView的约束也与视图的前导,尾随和底部对齐。

答案 2 :(得分:0)

如果您使用的是AutoLayout,则无法设置框架,只需设置适当的约束条件即可将UITableView放在UIViewController

  1. translatesAutoresizingMaskIntoConstraints = false设置为tableView以使用自动版式
  2. 将约束应用于位置和视图

    enter code heretableView.translatesAutoresizingMaskIntoConstraints = false
    
    NSLayoutConstraint.activate([
        tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
        tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
        tableView.topAnchor.constraint(equalTo: view.topAnchor),
        tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -110)
    ])